gpt4 book ai didi

javascript示例代码无法运行

转载 作者:行者123 更新时间:2023-11-28 15:32:32 25 4
gpt4 key购买 nike

网上有一段代码教程

sayHi(1);

function sayHi(x); {
alert(x); // 1
[].shift.call(arguments);
alert(x); // undefined, no x any more :/
}

在教程中它说:

修改参数的数组方法也会修改本地参数。

实际上,现代 ECMA-262 第五规范将参数与局部变量分开。但到目前为止,浏览器的行为仍然与上述相同。尝试一下示例看看。

一般来说,最好不要修改参数。

但是我尝试运行上面的代码,它输出警报 1 两次,而不是 1 和未定义。

http://javascript.info/tutorial/arguments

有人可以帮我澄清一下吗?谢谢

最佳答案

destroy pointed out ,您收到语法错误的原因是(可怕的是)自动分号插入无法正确更正代码,并且显式添加分号非常重要。

但是关于xarguments伪数组的行为的问题的实质是:

在松散模式(默认)下,命名参数和arguments伪数组之间存在链接。这是该链接的更好演示:

function foo(x) {
snippet.log(x); // "one"
snippet.log(arguments[0]); // also "one"
x = "two";
snippet.log(x); // "two"
snippet.log(arguments[0]); // also "two"
arguments[0] = "three";
snippet.log(x); // "three"
snippet.log(arguments[0]); // also "three"
}
foo("one");
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

了解 arguments[0]x 基本上是彼此的同义词。

您提到的教程似乎认为移动参数伪数组(删除第一个条目)将使x undefined 因为此时 arguments[0] 将是 undefined。虽然这是对命名 xarguments 伪数组之间链接的合理解释,但在 Chrome 的 V8、Firefox 的 SpiderMonkey、IE11 的 JScript 甚至IE8 的 JScript 要老得多。

在严格模式下,命名参数和 arguments 伪数组之间的链接不存在:

function foo(x) {
"use strict";

snippet.log(x); // "one"
snippet.log(arguments[0]); // also "one"
x = "two";
snippet.log(x); // "two"
snippet.log(arguments[0]); // "one" again, it wasn't changed
arguments[0] = "three";
snippet.log(x); // "two" again, it wasn't changed
snippet.log(arguments[0]); // "three"
}
foo("one");
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

一般来说,最好使用严格模式,即使在松散模式代码中也不要依赖链接。

关于javascript示例代码无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26712890/

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