`

JS 关于(function( window, undefined ) {})(window)写法的理解

阅读更多

JS 关于(function( window, undefined ) {})(window)写法的理解 [网络整理]

(function( window, undefined ) {})(window);
这个,为什么要将window和undefined作为参数传给它?

 

(function( $, undefined ) {})(jQuery); 同理

 

因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率。undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined。

还有,不要用window.undefined传递给形参,有可能window.undefined被其他人修改了,最好就是甚么都不传,形参的undefined就是真正的undefined了。

 

var undefined = 8;
(function( window ) { 
    alert(window.undefined); // 8
    alert(undefined); // 8
})(window);

var undefined = 8;
(function( window, undefined ) { 
    alert(window.undefined);  // 8
    alert(undefined); // 此处undefined参数为局部的名称为undefined变量,值为undefined
})(window);

区分上述两种方式:第一种每个语句都要去找一次window。第二种将window作为参数传递过去,是的不要每个语句都去找window,应该是提高了效率。 所以后者,就算外面的人把 undefined 定义了,里面的 undefined 依然不受影响。大概是为了最大程度防止外界的变量定义对所做封装的内部造成影响吧。

 

//方式一
(function(undefined ) {
   window.property1 = ……;
   window.property2 = ……;
   ……
})();
//方式二
(function( window, undefined ) {
    ... // code goes here

})(window);
//方式三
(function(undefined ) {
   var tmp = window;
   tmp.property1 = ……;
   tmp.property2 = ……;
   ……
})();

方式一的效率明显最低,方式二和方式三应该差不多。将window作为参数传递进去就可以让代码里面的语句可以直接用参数中的window,而不用再去找最外层的对象。假如要在函数中为window再设置 100000个属性,用参数传递过去只需要找一次最外层对象。不用参数传递,用到window的语句都要去找一次最外层对象。

 

 

分享到:
评论

相关推荐

    IE、FF的JS兼容写法

    这篇博客文章“IE、FF的JS兼容写法”探讨了如何编写能够同时在IE和FF下运行的兼容性JavaScript代码。 首先,我们需要理解这两个浏览器对于DOM(Document Object Model)操作的处理方式有所不同。例如,IE使用的是`...

    107个常用Javascript语句参数写法

    JavaScript支持六种基本数据类型:`String`、`Number`、`Boolean`、`Null`、`Undefined`和`Symbol`,以及复合数据类型`Object`,包括数组和函数。 ### 8. 字符串到数字的转换 `parseInt()`和`parseFloat()`函数...

    js插件的写法.编写javascript插件

    (function(window, document, undefined) { // 插件代码 })(window, document); ``` 2. **命名空间**: 为了更好地管理和组织代码,可以创建一个全局命名空间,将插件的所有方法和属性挂载在其下。例如: ```...

    js事件源window.event.srcElement兼容性写法(详解)

    这篇文档便是对window.event.srcElement属性及其兼容性写法的详细解读。 首先,简单介绍一下什么是事件源。在JavaScript中,当用户与页面进行交互(如点击、滚动、鼠标移动等)时,浏览器会触发一个事件,而这个...

    JavaScript 规范

    这里的IIFE接受三个参数:`log`用于日志记录,`w`代表`window`对象,`undefined`则是一个占位符,用于确保在IIFE内部`undefined`值不会被覆盖。通过这种方式,我们可以确保所有的变量都在这个封闭的作用域内,不会...

    Function模式下1

    if (typeof window.addEventListener === 'function') { utils.addListener = function (el, type, fn) { el.addEventListener(type, fn, false); }; } else if (typeof document.attachEvent !== 'undefined')...

    详解javascript立即执行函数表达式IIFE

    var wall = (function(window, WALL, undefined) { if (typeof WALL === 'undefined') { WALL = {}; } WALL.say = function() { console.log('hello'); }; return WALL; })(window, wall); ``` 放大模式类似...

    IT公司面试笔试题库腾讯Javascript面试题.doc

    在 Javascript 中,window 对象的 age 属性是 undefined,因为 window 对象没有 age 属性。 第 6题:执行下面的代码打印出来的结果,正确的是?正确答案是 (C) 6。因为在 Javascript 中,表达式的计算结果是按照...

    2014-11-17-JS模块化编程(1)——模块化1

    这种写法会将变量 a 和函数 aaa()挂载到 window 下,成为全局变量。但是,这种写法会产生问题,因为在大规模的 JS 开发中,可能会有多个 JS 文件,例如 a.js 和 b.js 中都定义了函数 aaa(),那么后加载的就会覆盖掉...

    js拖动窗口

    一、JavaScript拖动窗口原生写法 1. 首先,我们需要选择一个元素作为可拖动的窗口。通常,这个元素具有`position: absolute`或`position: relative`的CSS样式,以便我们可以自由地更改其位置。 ```html ; width: ...

    IT公司面试笔试题库-腾讯Javascript面试题.doc

    虽然最初 JavaScript 主要在浏览器环境中运行,但现在也可以通过 Node.js 等技术在服务器端运行。 ### 问题2:哪些变量是全局变量? - **描述**:假设存在如下代码片段: ```javascript var a = 1; function ...

    js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?

    JavaScript中的立即执行函数(Immediately Invoked Function Expression,简称IIFE)是一种常见的编程技巧,用于创建一个独立的作用域,避免变量污染全局环境。标题和描述中提到的两种IIFE的写法,`(function (){})...

    js代码-兼容性写法

    本压缩包文件“js代码-兼容性写法”提供了一些关于如何编写兼容不同浏览器的JavaScript代码的方法和示例。 1. **跨浏览器事件处理** 在不同的浏览器中,添加和移除事件监听器的方法各异。例如,IE早期版本使用`...

    (function(){})()的用法与优点

    例如,`(function(window, document, undefined) {...})(window, document)` 这样的写法可以确保 `undefined` 在函数内部始终为未定义,防止被意外覆盖。 5. **闭包**:IIFE 也经常与闭包结合使用,允许函数访问并...

    JavaScript基础.doc

    另外,外部JavaScript文件可以通过`<script src="file.js"></script>`引入。JavaScript遵循一定的语法规则,如大括号表示代码块,分号表示语句结束,注释可以使用单行`//`或多行`/* */`。 5. JavaScript语法基础 - ...

    JavaScript判断页面加载完之后再执行预定函数的技巧

    首先,我们需要理解JavaScript代码的执行时机。在传统的做法中,开发者往往直接在HTML文档中内嵌JavaScript代码,如: ```html ()"> ``` 上述代码中,当用户点击id为link的元素时,fun函数会被立即执行。这种方式将...

    javascript面试题目

    题目中给出了四个关于JavaScript的陈述,具体分析如下: - **选项A**: JavaScript与JScript是两种不同的实现,但实际上两者非常相似,主要区别在于不同的浏览器支持的不同。 - **选项B**: JavaScript与Java没有任何...

    javascript面试题、练习题

    - **基本数据类型**:了解JavaScript的基本数据类型对于理解变量存储和使用至关重要。JavaScript中有六种基本数据类型:Number、String、Boolean、Null、Undefined以及Symbol(自ES6起添加)。 - **判断数组类型**...

    JavaScript函数IIFE使用详解

    (function(window, document, undefined) { // 这里可以使用window和document变量 })(window, document); ``` IIFE的一个常见用途是保护代码中使用的私有变量和函数,防止它们被外部访问。 模块化编程在JavaScript...

Global site tag (gtag.js) - Google Analytics