Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript变量声明,为什么这是合法的?_Javascript_Syntax_Declaration - Fatal编程技术网

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中的变量可以是函数,这些函数甚至可以是自动执行的(就像在您的示例中——这就是结尾的空括号为您所做的)。闭包是非常有用的编程构造,非常值得谷歌搜索。看看他们!