gpt4 book ai didi

javascript - 在声明之前调用一个函数,独立于浏览器?

转载 作者:数据小太阳 更新时间:2023-10-29 05:50:34 26 4
gpt4 key购买 nike

如果我在我的 <head> 中这样做标签:

<script type="text/javascript" src="foo.js"></script>

在 foo.js 中我这样做:

var foo = new Foo();
function Foo()
{
//code here
}

这段代码能否可靠地实例化变量 foo即使它包含在函数定义之上,还是应该将它移动到文件底部,如下所示:

function Foo()
{
//code here
}
var foo = new Foo();

最佳答案

您的示例可以在任何遵循 ECMAScript 标准的浏览器中运行(至少在这个问题上都可以)。

参见 specification 的第 10.3-10.5 节.

首先设置局部作用域,然后函数体实际运行。

阅读 10.5(该部分确实不是很长)以了解为什么@meder 的答案是正确的。

如果您不想自己阅读规范:

10.5 告诉以该顺序声明变量(如果某个名称出现两次则覆盖):

从外部范围继承 = 设置将影响外部范围:

  • 周围范围的变量。
  • 自己的函数名。

本地作用域 = 设置不会影响外部作用域:

  • 参数(从左到右)。
  • 参数对象。
  • 声明所有内部变量(如果有则不覆盖当前值,如果没有则undefined)

总而言之:

返回函数 x 本身:

function x() {
return x;
}

返回参数x:

function x(x) {
return x;
}

返回内部函数 x:

function x(x) {
return x; // the return does no harm, x is already set
function x() {} // before the actual body is evaluated
}

同时返回内部函数 x:

function x(x) {
var x; // in this case a no-op
return x;
function x() {}
}

返回 42:

function x(x) {
var x = 42; // overwrite x in local scope
return x;
function x() {}
}

返回第二个参数:

function x(x,x) { // assign left to right, last one "wins"
return x; // arguments[0] would still name the first argument
}

x 被第二次调用时返回 2,因为 x 被设置为内部函数:

function x() {
x = function() { return 2; } // set x in outer scope
return 1;
}

关于javascript - 在声明之前调用一个函数,独立于浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10792021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com