对IIFE中(function(window,undefined){})(window)中为什么传递undefined的理解

1.在函数中定义形参但没有传递实参就相当于定义了变量但未赋值,所以下面中的a就是undefined

1 function test(a){
2     console.log(a)//undefined
3 };
4 test();

2.在IIFE中,window作为实参传递进去,避免了执行代码时,每次都到全局中寻找window从而提高了效率,但是为什么形参中还要指定一个undefined呢,上面说过在函数中定义了形参就相当于定义了但不赋值,那在这个立即执行函数中undefinde还是undefined。所以即使在全局中修改了undefined的值,也不会影响这个自执行函数中的undefined,不过在chrome 59以上,firefox53以上undefined不被允许修改,输出的都是undefined。在ie8以下undefined的值能被修改,输出的是8和undefined,所以传递形参就能最大程度的保证了在各种浏览器中外部修改变量对函数内部的影响。IIFE前一定要有括号否则会报错。

1 //在ie8中
2 var undefined = 8;
3 (function( window , undefined ){
4     console.log(window.undefined) //8
5     console.log(undefined); //undefined
6 })(window);
//在chrome和Firefox中
var undefined = 8;
(function( window , undefined ){
    console.log(window.undefined) //undefined
    console.log(undefined); //undefined
})(window);
时间: 2024-10-13 07:31:39

对IIFE中(function(window,undefined){})(window)中为什么传递undefined的理解的相关文章

jquery源码中的(function(window, undefined){})(window)【转】

(function( window, undefined ) {})(window);这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ) {})(jQuery); 同理 因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率.undefined在老一辈的浏览器是不被支持的,直接使用会报错,js框架要考虑到兼容性,因此增加一个形参undefined. 还

关于jQuery源码中(function(window,undefined){//dosomething()})(window)写法解释

一.首先是最常见的闭包 (Closure) 范式自执行函数的写法,这里用匿名函数封装(构造块级作用域),避免了匿名函数内部的代码与外部之间发生冲突(如使用了相同的变量名). 1 (function() {// ...})(); 二.自执行函数和其他函数类似,都可以传入参数:jQuery源码中将window作为一个参数传入, window是DOM对象模型的最顶层对象,把全局变量传进来,就避免了到外层去寻找,提高效率: 1 (function(window) {// ...})(window); 当

window.onload和JQuery中$(function(){})的区别即其实现原理

一.区别 window.onload是在DOM树加载完成之后(DOM树加载完不代表全部资源加载完,例如图片,音频和视频等还没加载)执行的. 在Jquery中$(function(){ })和$(document).ready(function(){ })的效果是一样,是在DOM树加载完成之后就会执行.所以$(document).ready(function(){ })是比window.onload要先执行的.那么JQuery中$(document).ready(function(){ })用原生

JS (function (window, document, undefined) {})(window, document)的真正含义

原文地址:What (function (window, document, undefined) {})(window, document); really means 按原文翻译 在这篇文章中,我们将探讨标题所暗示的内容,并解释自调用函数设置给我们带来了什么. 有趣的是,我被问到关于IIFE(即时调用的函数表达式)的很多,它采用以下设置: (function (window, document, undefined) { // })(window, document); 那么为什么不写一篇关

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

JS 关于(function( window, undefined ) {})(window)写法的理解 [网络整理] (function( window, undefined ) {})(window); 这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ) {})(jQuery); 同理 因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率.und

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

JS 关于(function( window, undefined ) {})(window)写法的理解 [网络整理] (function( window, undefined ) {})(window);这个,为什么要将window和undefined作为参数传给它? (function( $, undefined ) {})(jQuery); 同理 因为 ecmascript 执行JS代码是从里到外,因此把全局变量window或jQuery对象传进来,就避免了到外层去寻找,提高效率.unde

分析(function(window, undefined) {})(window)

有的时候,我们会在JS框架中看到这行 (function(window, undefined) {})(window) ,它是做什么用的,我们来分析下它 首先这就是一个匿名函数,立即执行它 (function(window, undefined) { // coding })(window) 为这么要这样写,有什么作用 对js进行压缩的时候 均可以替换成其他简写字符,从而减少文件大小,因为他们被视为局部变量使用. (function(w, u) { // coding })(w) window:

Jquery中$(document).ready() 和 JavaScript中的window.onload方法 比较

Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕. 2.编写个数不同 window.onload不能同时编写多个,如果有多个window.onload方法,只会执行一个(最后一个)       

jsWindow 对象 Window 对象 Window 对象表示浏览器中打开的窗口。 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。 注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 Window 对象集合 集合 描述 frames[] 返回窗口中所有命

一.JSX简介 JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析. 如下(JS写法) var child1 = React.createElement('li', null, 'First Text Content'); var child2 = React.createElement('li', null, 'Second Text Content'); var