Kin*_*rog 5 javascript jquery underscore.js self-executing-function
我正在查看underscore.js库的代码(jQuery做同样的事情)并且只想澄清为什么窗口对象被传递到自执行函数.
例如:
(function() { //Line 6
var root = this; //Line 12
//Bunch of code
}).call(this); //Very Bottom
Run Code Online (Sandbox Code Playgroud)
既然this是全局的,为什么它被传递到函数中?以下工作也不会这样吗?这样做会产生什么问题?
(function() {
var root = this;
//Bunch of code
}).call();
Run Code Online (Sandbox Code Playgroud)
我怀疑原因是ECMAScript 5 严格模式.
在非严格模式下,这个IIFE
(function() {
console.log(this); // window or global
})();
Run Code Online (Sandbox Code Playgroud)
记录window对象(或global对象,如果您在node.js服务器上),因为全局对象是作为this不作为对象方法运行的函数提供的.
将结果与之比较
"use strict";
(function() {
console.log(this); // undefined
})();
Run Code Online (Sandbox Code Playgroud)
在严格模式下,this裸调用函数是未定义的.因此,Underscore作者用于call为this匿名函数提供显式,以便在严格和非严格模式下进行标准化.简单地调用函数(就像我在我的例子中所做的那样)或者使用.call()导致可以解决的不一致性.call(this).
| 归档时间: |
|
| 查看次数: |
763 次 |
| 最近记录: |