“这和var前面的var是一样的原理吗?”
是的。输出是一个变量。
所以我建议你在定义var
它的时候在它前面使用。您最终可以在不使用 var 的情况下更改其值。如:
var A=1;
A=2;
A=A+1;
将函数的“脚本”视为该变量的“值”。
var F=function() {console.log('one')};
// change it later
F=function() {console.log('two')};
(不建议你这样做,而是向你展示它是 100% 的 var)
您实际上是在为名为“output”的变量分配“function() {console.log('result')}”的值,而不是作为字符串,而是作为执行的脚本。注意末尾的分号,如var A=3;
现在“里面”output
有执行的代码console.log('result')
。(或多或少,只是为了解释)。
因为您通常以后不会更改相同的功能(您可以,有时它已经完成)我真的建议您在每次var
定义这样的功能时在它前面使用,即使在不是严格必要的情况下,只是为了安全起见,不要覆盖现有功能。
这与将函数定义为:
function output() {console.log('result')}
这里没有 = 符号,没有赋值,末尾没有分号。这不是变量赋值,而是函数“定义”,虽然结果相似,而且两种情况下都可以调用 output(),但还是有区别的。我认为主要的一个是在逐行执行脚本之前检查函数定义,而对于赋值,你确实需要在使用函数之前处理赋值行。所以这:
output();
function output() {console.log('result')}
作品。虽然这样:
output(); // nope! output not defined yet!
var output=function() {console.log('result')}
没有。当赋值指令被读取和解释时,变量被赋值或改变。
// here A is undefined, B() prints 'ok'
var A=function() {console.log('first')};
// here A() prints 'first', B() prints 'ok' as usual
A=function() {console.log('second')}; // change it
// here A() prints 'second', B() prints 'ok' as usual
function B() {console.log('ok')}
// same here A() prints 'second', B() prints 'ok'