Javascript变量声明,为什么这是合法的?
我第一次遇到这个变量声明语法Javascript变量声明,为什么这是合法的?,javascript,syntax,declaration,Javascript,Syntax,Declaration,我第一次遇到这个变量声明语法 var myVar = (function() { return 1; })(); 我的两个主要问题是 它叫什么,为什么它是合法的 原谅我,如果以前有人问过这个问题,我试着四处搜索,但我不知道这个符号叫什么,所以我什么也找不到 另外,我要补充的是,这两组括号的作用是什么?第一个函数包含函数,第二个函数为空。这是一个匿名函数(也称为lambda函数),它将立即执行,并将其返回值(1)分配给变量(myVar)。它是合法的,因为说明书上说它是合法的。这是许多语言
var myVar = (function() {
return 1;
})();
我的两个主要问题是
它叫什么,为什么它是合法的
原谅我,如果以前有人问过这个问题,我试着四处搜索,但我不知道这个符号叫什么,所以我什么也找不到
另外,我要补充的是,这两组括号的作用是什么?第一个函数包含函数,第二个函数为空。这是一个匿名函数(也称为lambda函数),它将立即执行,并将其返回值(
1
)分配给变量(myVar
)。它是合法的,因为说明书上说它是合法的。这是许多语言中的一个非常常见的功能。除了定义一个匿名函数并立即调用它之外,我不确定这是什么
这是完全合法的,因为
最终的结果是,
myVar=1
自执行函数通常用于封装上下文并避免名称冲突。在(function(){..})()中定义的任何变量都不是全局变量
以下代码:
var same_name = 1;
var myVar = (function() {
var same_name = 2;
console.log(same_name);
})();
console.log(same_name);
生成此输出:
1
2
通过使用此语法,您可以避免与javascript代码中其他地方声明的全局变量冲突。您正在将
myVar
设置为立即调用的函数表达式或IIFE:返回的任何内容;它们非常有用,但在给定的示例中,它与myVal=1
相同。请看这个简单的fiddle示例:该编程模式称为闭包。这是合法的,因为javascript中的变量可以是函数,这些函数甚至可以是自动执行的(就像在您的示例中——这就是结尾的空括号为您所做的)。闭包是非常有用的编程构造,非常值得谷歌搜索。看看他们!