特定匿名函数的目的
The purpose of particular anonymous function
我很难理解下面的函数要做什么。我需要了解这个函数的目的是什么,因为我在 运行 这个函数时使用不同的浏览器得到不同的反应。
function anonymous()
{
return(function()
{
'use strict';
return !this&&!!Function.prototype.bind;
}
());
}
这实际上不是一个糟糕的问题,'use strict';
表示函数内的代码应该在严格模式下评估,这是 ECMAScript5 的一部分。
启用严格模式后,您不能使用未声明的变量 - 这在这里很重要。如果您的浏览器支持 ECMAScript5,则 this
变量未声明,即 undefined
。如果您的浏览器不支持 ECMAScript5 this
通常是 Window
.
所以这是一个兼容性检查你的浏览器是否支持 ECMAScript5:
'use strict';
var hasECMAScript5 = !this;
然后,表达式 !!Function.prototype.bind
检查您的浏览器是否支持绑定函数(参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)。
它测试浏览器是否同时支持 strict mode and bind。
它使用 IIFE,因为 this
的值取决于函数的调用方式。通过使用新函数,您可以保证调用它的上下文是什么。
我很难理解下面的函数要做什么。我需要了解这个函数的目的是什么,因为我在 运行 这个函数时使用不同的浏览器得到不同的反应。
function anonymous()
{
return(function()
{
'use strict';
return !this&&!!Function.prototype.bind;
}
());
}
这实际上不是一个糟糕的问题,'use strict';
表示函数内的代码应该在严格模式下评估,这是 ECMAScript5 的一部分。
启用严格模式后,您不能使用未声明的变量 - 这在这里很重要。如果您的浏览器支持 ECMAScript5,则 this
变量未声明,即 undefined
。如果您的浏览器不支持 ECMAScript5 this
通常是 Window
.
所以这是一个兼容性检查你的浏览器是否支持 ECMAScript5:
'use strict';
var hasECMAScript5 = !this;
然后,表达式 !!Function.prototype.bind
检查您的浏览器是否支持绑定函数(参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind)。
它测试浏览器是否同时支持 strict mode and bind。
它使用 IIFE,因为 this
的值取决于函数的调用方式。通过使用新函数,您可以保证调用它的上下文是什么。