(function() {
var a = 'g';
function foo() {
console.log(a);
a = 7; //
}
console.log(foo(), a);
}());
任何人都可以解释这个代码示例的逐步执行和输出。我把输出放在了未定义的7'
答案 0 :(得分:3)
您正在创建一个匿名函数并立即执行(IIFE)
然后,在此范围函数中:
a
var,其值为g
a
var。
不会立即调用此foo
函数。log
语句中,执行foo
:
a
(值g
)a
IIFE范围内的var更改为值7
foo
不返回任何内容foo
返回undefined
(无返回值)a
值,7
执行后foo
。所以你在控制台中:
g
undefined 7
答案 1 :(得分:0)
这是一个无需任何调用即可自动执行的自动调用函数。
执行的结果/步骤是:
g
与console.log(a);
一起投放,因为我们最初有a="g"
。
undefined 7
与console.log(foo(), a);
:
foo()
将返回undefined
,因为没有return
声明a
将返回7
,因为我们a=7
; 答案 2 :(得分:0)
(function() {
...
...
}());
这只是一种声明匿名函数并调用它的方法
var a = 'g';
function foo() {
console.log(a);
a = 7; //
}
console.log(foo(), a);
这里你在javascript中声明一个变量a ='g'如果你使用关键字“var”声明一个变量该变量的范围是函数,这意味着在该函数内部(也在子函数中)每个人都可以用它。
然后你声明了一个foo函数,foo函数可以看到变量a因为foo是在前一个函数中声明的。 console.log(a)只打印a的值,这样就会打印'g'然后将a的值更改为7.
声明后你调用console.log(foo(),a),这意味着你正在执行foo并打印foo的返回值'undefined',因为没有return语句,然后打印值在执行foo之后变为7。
所以输出是:
g
undefined 7