javascript - 帮助理解 javascript 约定

标签 javascript

我看到jQuery插件和其他javascript库文档是这样设置的:

(function($,window,undefined){
    ...plug-in code...
});

为什么要把脚本包裹在一个函数里,那个函数能接收什么args?

最佳答案

收到的参数是:

(function($,window,undefined){
  //..
})(jQuery, window);

$:jQuery 对象的引用,通常是为了能够将其作为 $ 别名来引用,因为在外部范围代码可能处于“兼容模式”。

window:window 参数通常用于缩短 标识符查找。在浏览器脚本中 window 是全局对象的属性,为了解析它,标识符解析过程必须检查每个范围,直到它到达全局范围。如果我们添加 window 作为参数,无论我们的函数嵌套多深,查找都会很短。

在非浏览器脚本环境中,window 标识符甚至不存在,该模式是跟踪全局对象的常用方式,例如:

(function (global, undefined) {
  //..
})(this);

请注意,全局代码(不是函数代码)的 this 值始终引用全局对象。

undefined:最后但同样重要的是,undefined 参数,它被用作“安全措施”,因为 undefined 也是 Global 对象的一个​​属性,在 ECMAScript 3rd Edition Specification 中,它的值是可变的,imagine:

undefined = true;

那会弄乱你的代码,但如果我们有一个参数,并且我们没有传递任何东西给它,它将保存未定义的值

幸运的是,ECMAScript 第 5 版规范已修复此问题,undefinedInfinityNaN 不再可写。 :)

关于javascript - 帮助理解 javascript 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4195881/

相关文章:

javascript - 单击后退按钮时如何返回到之前的状态

javascript - 使用 Promise.all() 获取带有 await 语句的 url 列表

javascript - 尝试在 Android 应用程序中使用 google.maps.geocoder 时出现 'google is not defined' 错误

javascript - jQuery如何在一系列延迟后循环一个函数

javascript - 查找离点击点最近的元素

javascript - 在不同窗口的上下文中执行函数?

javascript - 如何更新在对话框小部件中打开的 div?

javascript - 当我更改下拉列表中的状态时,它会更改 Angular js中实际范围的值

javascript - Yii2:如何禁用单选按钮

javascript - 如何防止@require 缓存外部js 脚本