HTML code:
<html><body><pre><script src="pippo.js"></script></pre></body></html>
Javascript代码(文件“pippo.js”):
document.writeln("start");
var f1 = function(){
document.writeln('Hello, world! f1');
}
var f2 = function(){
document.writeln('Hello, world! f2');
}
(window)
在浏览器中输出(我尝试使用Chrome和FF):
开始
你好,世界! f2
为什么执行上一个defiend函数?
如果我添加a=0
f2未执行
所以在我看来,最后的定义是evalueted
我不知道为什么。
答案 0 :(得分:2)
普通function(){}()
是无效的表达
但是,function x(){}()
和var x = function(){}();
是有效的。
在JavaScript中,使用括号调用函数。
var f2 = function(){ document.writeln('Hello, world! f2'); }(window)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^| |
// Function definition Invoke function
声明变量f2
,并将函数的返回值赋给它。它没有任何返回值,因此f2
为undefined
。
但是,在您的函数中,您正在调用document.writeln
方法,该方法在文档中打印一行内容。这是你观察到的效果的原因。
(您的代码也可以用这种方式编写):
var some_function = function(){ document.writeln('Hello, world! f2'); };
var f2 = some_function(window);
<小时/> 如果你想在下一行使用
(window)
,而不调用f2
行的函数,你必须在该行的末尾添加一个分号:
var f2 = function(){ document.writeln('Hello, world! f2'); };
(window); // ^ Semicolon