这两者之间有什么区别
what's the difference between those two?
var test = function(x) {
return x + 2;
};
我可以使用测试(3)
但是当我使用
var test = (function(x) {
return x + 2;
})();
我无法使用测试(3)
为什么?
第二个代码片段是 IIFE - 立即调用的函数表达式的示例。
第一组括号内的表达式的结果定义了一个接受一个参数(名为 x
)的函数。第二组括号立即调用它,返回结果。由于在调用表达式时未传递任何参数,因此x
undefined
,因此它会undefined + 2
计算表达式并返回 NaN
。
在第一种情况下,您正在定义一个函数,因此您可以执行test(3)
在第二种情况下,您正在执行一个函数,因此,结果可能会NaN
。
在第二个示例中,您正在利用 JavaScript 闭包。闭包允许您控制作用域和命名空间,以及声明私有方法和变量。
请考虑以下事项:
var test = (function() {
var privateVar1;
var privateVar2;
function privateFunction() {
}
return {
publicFunction1: function() {
},
publicFunction2: function() {
}
};
})();
test
现在等于以下内容:
{ publicFunction1: function() {}, publicFunction2: function() {} }
该函数在声明后立即调用,此时x
没有值。在函数声明之前初始化x
(超出其范围)以解决您遇到的问题:
var x = 10;
var test = (function(x) {
return x + 2;
})();
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 在ember/handlers中使用value和valueBinding有什么区别
- 这两个关于 JavaScript 作用域链的例子有什么区别?
- 什么's本地node.js服务器和python简单http服务器之间的区别
- Math.min()和Math.max()之间有什么区别?在Javascript中
- angularjs中的ng网格和ui网格有什么区别
- webpack开发模式和生产构建模式之间有什么区别
- 缓存!saveLocations()和addLocation()函数有什么区别
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 以下两者在javascript中有什么区别
- 什么's extjs中的mon()和on()之间的区别
- jquery.js和jquery.lite.js有什么区别
- 通过Nuget安装Angular JS和Angular JS核心有什么区别
- XMLHttpRequest对象的open()和send()方法之间有什么区别
- 这两种不同的创建对象文字的方法有什么区别
- jQuery中这两个词有什么区别
- 在Javascript语法中:和::和:::有什么区别
- 什么'这是JS中以下定义方式的区别
- getElementById 和 getElementsByClassName 有什么区别?
- (typeof variable === “function”) 和 jQuery.isFunction() 有什么区别