2011-03-17 69 views
2

我跑成什么似乎是一个愚蠢的问题,有一些JavaScript:`函数去()`VS`去=功能()`

go = function() { 
    alert("Go!"); 
} 

$(function() { 
    go(); 
}); 

页面加载时我得到一个错误:

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; .NAP 1.1) Timestamp: Thu, 17 Mar 2011 20:18:03 UTC

Message: Object doesn't support this property or method Line: 1 Char: 1 Code: 0 URI: http://localhost:61710/Scripts/number.js

当我改变go初始化这样:

function go() { 
    alert("Go!"); 
} 

...一切都运行得很好。

我错过了什么?另外,是否有理由使用一种形式的函数初始值设定项而不是另一种?

编辑: 当我使用运行在IE8的一个实例的代码内置Visual Studio的Web服务器(不开始调试)我得到这个错误。当我在没有Visual Studio的独立IE8实例中运行代码时,它工作得很好。也许Visual Studio迫使IE使用更严格的JS编译器设置?

+0

你可以发布你使用的是什么浏览器? – Neal 2011-03-17 20:26:53

+0

您的原创作品适用于我:http://jsfiddle.net/Xz3s5/在IE8,FF3.3.6,Chrome 10.0.648.151和Opera 10.63上。 – tvanfosson 2011-03-17 20:36:41

+0

我正在使用IE8。请参阅错误详细信息的用户代理部分。 – 2011-03-17 20:38:50

回答

8

你应该首先声明变量:

var go = function() { 
    alert("Go!"); 
} 

的原因之一,使用这种形式是,它可以帮助避免污染与功能的全局命名空间(见这个概念here的例子)。

+0

s/need/should /在技术上更加正确。它应该(并且确实)在不使用var的情况下工作。当然,如果你在最外层的范围使用var,它并没有太大的区别。 – tvanfosson 2011-03-17 20:33:00

3

的差异(和可以帮助你决定这比另一种更好)是

go = function() { 
    alert("Go!"); 
} 

在分析时定义,而

function go() { 
    alert("Go!"); 
} 

在运行时定义。

P.S.,它为我工作,但您可能需要做:

var go = ... 

而不是

go = ... 
+1

+1分析时间和运行时间的事情。这就回答了我在初始化和调用函数时的一个持续问题。 – 2011-03-17 21:01:06