为什么要执行这个函数?
Why is this function executed?
我需要帮助来理解以下脚本的工作原理。
var foo = function() {
console.log("A");
}
(function() {
// Empty
})
当 运行 此脚本带有节点 (v5.9.1) 时,输出为 "A"。我希望它什么都不做。这里为什么执行foo?我可以删除第一行或最后三行,然后就没有输出了。
- 编辑:如果我在第 3 行的大括号后放置一个
;
,它会按预期工作。但是为什么呢?
如果将 (...)
紧跟在函数表达式之后,就会执行该函数。
问题中的代码定义了一个调用console.log
的函数。然后它调用该函数(向它传递一个函数的参数(未使用),该函数无论如何都不执行任何操作)。然后将调用第一个函数的return值赋值给foo
.
可以改写为:
var function_a = function() {console.log("A");};
var function_b = function() {};
var foo = function_a(function_b);
…唯一的副作用是创建了 function_a
和 function_b
变量。
分号插入通常被认为是有害的,因为它会导致人们期望空格将语句分隔成两个不相关的表达式。
JSHint 会警告您这个问题:
7 Missing semicolon.
JavaScript 将 (...)
解释为对先前定义的函数的调用(请注意,您将另一个函数作为参数传递,在 foo
中将被忽略),因为两者之间没有任何内容}
和 (
个符号。
用你的代码
var foo = function() {
console.log("A");
}
(function() {
// Empty
})
javascript 解释器正在读这个:
var foo = function() {
console.log("A");
}(function() {});
对于解释器,你声明了一个匿名函数,并向它传递了一个参数,它 returns 什么都没有,那么 foo 的值是 undefined
这就是为什么在必要时在每一行的末尾放置 ;
非常重要的原因。
我需要帮助来理解以下脚本的工作原理。
var foo = function() {
console.log("A");
}
(function() {
// Empty
})
当 运行 此脚本带有节点 (v5.9.1) 时,输出为 "A"。我希望它什么都不做。这里为什么执行foo?我可以删除第一行或最后三行,然后就没有输出了。
- 编辑:如果我在第 3 行的大括号后放置一个
;
,它会按预期工作。但是为什么呢?
如果将 (...)
紧跟在函数表达式之后,就会执行该函数。
问题中的代码定义了一个调用console.log
的函数。然后它调用该函数(向它传递一个函数的参数(未使用),该函数无论如何都不执行任何操作)。然后将调用第一个函数的return值赋值给foo
.
可以改写为:
var function_a = function() {console.log("A");};
var function_b = function() {};
var foo = function_a(function_b);
…唯一的副作用是创建了 function_a
和 function_b
变量。
分号插入通常被认为是有害的,因为它会导致人们期望空格将语句分隔成两个不相关的表达式。
JSHint 会警告您这个问题:
7 Missing semicolon.
JavaScript 将 (...)
解释为对先前定义的函数的调用(请注意,您将另一个函数作为参数传递,在 foo
中将被忽略),因为两者之间没有任何内容}
和 (
个符号。
用你的代码
var foo = function() {
console.log("A");
}
(function() {
// Empty
})
javascript 解释器正在读这个:
var foo = function() {
console.log("A");
}(function() {});
对于解释器,你声明了一个匿名函数,并向它传递了一个参数,它 returns 什么都没有,那么 foo 的值是 undefined
这就是为什么在必要时在每一行的末尾放置 ;
非常重要的原因。