Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 - Fatal编程技术网

Javascript 为什么我们要在一个语句中将函数用括号括起来两次?

Javascript 为什么我们要在一个语句中将函数用括号括起来两次?,javascript,Javascript,可能重复: 例如: (function($) { document.getElementById("foo").innerHTML = 'bar'; })(); var x; //all is fine, so if I said function here, it would be a start of a function declaration (var x) //Gives an error, so replacing var x with a function would be

可能重复:

例如:

(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
var x; //all is fine, so if I said function here, it would be a start of a function declaration

(var x) //Gives an error, so replacing var x with a function would be a function expression

var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression

我知道我们想要创建自己的作用域来防止变量冲突,但是为什么javascript需要有?

函数中的第一个结果,就像2导致2一样。第二个调用它。

第一个生成函数,与2生成2的方式相同。第二个调用它。

这使它成为一个自调用匿名函数

(function() { 
    /* function body */ 
}) /* <-- end of function definition */ (); // <-- invoke that function immediately

这使它成为一个自调用匿名函数

(function() { 
    /* function body */ 
}) /* <-- end of function definition */ (); // <-- invoke that function immediately
它没有,它有函数{}

函数语法为函数{},函数调用运算符为。包装函数的括号在技术上并不特殊,您可以将其替换为!:

这样做行不通:

function(){}()
因为这是在语句上下文中,所以函数启动函数声明而不是表达式。由于函数声明必须有名称,因此语法失败

如果我们有!函数{}或函数{},则它不能是语句,因为!或者已经需要一个表达式,因此它将被视为一个表达式

因此,您无需任何额外费用即可完成此操作:

var a = function() {
        return false;
}();
因为var a=已经需要一个表达式,所以函数不可能是函数声明的开始

试金石测试函数是否会被视为表达式或声明的一种简单方法是问问自己,我可以在这里使用var x吗

例如:

(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
var x; //all is fine, so if I said function here, it would be a start of a function declaration

(var x) //Gives an error, so replacing var x with a function would be a function expression

var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression
依此类推

没有,它有函数{}

函数语法为函数{},函数调用运算符为。包装函数的括号在技术上并不特殊,您可以将其替换为!:

这样做行不通:

function(){}()
因为这是在语句上下文中,所以函数启动函数声明而不是表达式。由于函数声明必须有名称,因此语法失败

如果我们有!函数{}或函数{},则它不能是语句,因为!或者已经需要一个表达式,因此它将被视为一个表达式

因此,您无需任何额外费用即可完成此操作:

var a = function() {
        return false;
}();
因为var a=已经需要一个表达式,所以函数不可能是函数声明的开始

试金石测试函数是否会被视为表达式或声明的一种简单方法是问问自己,我可以在这里使用var x吗

例如:

(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
var x; //all is fine, so if I said function here, it would be a start of a function declaration

(var x) //Gives an error, so replacing var x with a function would be a function expression

var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression

依此类推

两者都不是真正的复制品。这个问题承认函数的范围问题,但质疑第二组参数的目的。这两个参数都不是真正的重复。这个问题承认函数的作用域问题,但对第二组参数的用途提出了疑问。能够在函数中包装括号并调用该函数是否只是一种标准的javascript语法?我想我要问的真正问题是javascript中的括号是什么,它能做什么第一对括号告诉javascript将函数定义作为表达式来处理。第二对命令它调用它。第二对与任何其他函数调用(如someFunction)没有什么不同;它看起来很奇怪,因为函数本身是匿名的/没有命名。更多信息:能够在函数中包装括号并调用该函数是否只是一种标准javascript语法?我想我要问的真正问题是javascript中的括号是什么,它能做什么第一对括号告诉javascript将函数定义作为表达式来处理。第二对命令它调用它。第二对与任何其他函数调用(如someFunction)没有什么不同;它看起来很奇怪,因为函数本身是匿名的/没有命名。更多信息: