Javascript `函数go()`vs`go=function()`

Javascript `函数go()`vs`go=function()`,javascript,visual-studio,internet-explorer-8,Javascript,Visual Studio,Internet Explorer 8,我在一些Javascript中遇到了一个看似愚蠢的问题: go = function () { alert("Go!"); } $(function () { go(); }); 加载页面时,我收到一个错误: 网页错误详细信息 用户代理:Mozilla/4.0(兼容; MSIE8.0;WindowsNT6.1;WOW64; Trident/4.0;SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729;.M

我在一些Javascript中遇到了一个看似愚蠢的问题:

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

$(function () {
    go();
});
加载页面时,我收到一个错误:

网页错误详细信息

用户代理:Mozilla/4.0(兼容; MSIE8.0;WindowsNT6.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) 时间戳:2011年3月17日星期四20:18:03 UTC

消息:对象不支持此操作 属性或方法行:1个字符:1 代码:0 URI:

当我将
go
初始值设定项更改为:

function go() {
    alert("Go!");
}
…一切正常

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

编辑:
当我使用内置的VisualStudioWeb服务器在IE8实例中运行代码时(启动时不进行调试),会出现此错误。当我在没有VisualStudio的情况下在IE8的单独实例中运行代码时,它运行得很好。也许Visual Studio强制IE使用更严格的JS编译器设置?

您应该首先声明变量:

var go = function () {
    alert("Go!");
}
使用此表单的一个原因是,它可以帮助并避免函数污染全局名称空间(请参见此概念的示例)。

对我来说很好:

尽管您可以尝试以下方法:

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

$(go);
区别(并可能帮助你决定哪一个更好)是

在分析时定义,而

function go() {
    alert("Go!");
}
在运行时定义

顺便说一句,这对我很有效,但是你可能需要:

var go = ... 
而不是

go = ...

你能发布你正在使用的浏览器吗?你的原创作品给我:在IE8、FF3.3.6、Chrome 10.0.648.151和Opera 10.63上。我正在使用IE8。请参阅错误详细信息的“用户代理”部分。看起来只有当IE8实例连接到Visual Studio时才会出现错误。s/need/should/在技术上更为正确。它应该(并且确实)在不使用var来确定范围的情况下工作。当然,如果您在最外层的范围内使用var,它实际上并没有多大区别。解析时和运行时的值为+1。这就解决了我在初始化和调用函数的顺序方面一直存在的问题。
go = ...