It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
已关闭8年。
在执行上面的测试脚本时,我得到了两次“抱歉”,我期望是“ hai”然后是“ hai”。
当我将第5行更改为[随机尝试]
我知道它是“ hai”和“ hai”
在情况2中它如何工作?为什么在情况1中不起作用?
AFAI,javascript会执行变量提升,因此该测试将在作用域的开头初始化为undefined,并在赋值时重新分配。但这并没有帮助我。
已关闭8年。
<html>
<head>
<script type='text/javascript'>
var process = function (test) {
var i = test;
this.echo = function () { console.log(i); };
};
var test = 'hai';
var hai = new process(test);
hai.echo();
test = 'sorry';
hai.echo();
</script>
</head>
<body style='height:1000px;width:100%'>
</body>
在执行上面的测试脚本时,我得到了两次“抱歉”,我期望是“ hai”然后是“ hai”。
当我将第5行更改为[随机尝试]
var i = (function () {return test;})();
我知道它是“ hai”和“ hai”
在情况2中它如何工作?为什么在情况1中不起作用?
AFAI,javascript会执行变量提升,因此该测试将在作用域的开头初始化为undefined,并在赋值时重新分配。但这并没有帮助我。
最佳答案
您将按引用传递与按值传递混淆了。 JavaScript only允许后者(尽管您可能会在elswhere读到什么)。
在这种情况下,您要将值"hai"
传递给process
构造函数。该值然后在内部范围中存储到i
变量。此后更改test
的值将不会更改i
的值。
出于相同的原因,您的两个测试用例都无法按预期工作。
10-06 08:07