在下面的代码中jQuery,为什么下一个参数是undefined
JavaScript的:
(function(a,b){
....
})(window)
Run Code Online (Sandbox Code Playgroud)
在这里a=window,但是b=undefined,为什么会这样?
这是一种常见的技术,可以确保您有一个真正的undefined值来检查,因为undefined窗口对象的属性曾经是可写的,因此无法可靠地用于检查.由于只有一个参数移交给该函数,第二个被保证是undefined.该变量的名称无关紧要,它也可以是undefined,foobar或者在这种情况下,(因为这是节省宝贵字节的最短方式)b.
现在您可以安全地检查变量的不确定性,因为您确定b的值:
// overwriting the global undefined property works in old browsers
undefined = 3;
(function(a,b){
var asd; // not initialised, thus undefined
if (asd === undefined){
// should trigger, but won't because undefined has been overwritten to 3
}
if (asd === b){
// is safe, bcause you know that b is undefined
}
})(window)
Run Code Online (Sandbox Code Playgroud)
新浏览器(IE9,FF4 +,Chrome)遵守EcmaScript5规范,undefined不再可写.
因为您没有为第二个参数传递任何内容.你只传递一个,即window.
你的代码
(function(a,b){
....
})(window)
Run Code Online (Sandbox Code Playgroud)
定义一个函数并立即调用它.上面的最后一行实际上使用window参数调用该函数.如果在那里传递2个参数,b则不会是未定义的.
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |