gpt4 book ai didi

javascript - 在回调中保留变量范围

转载 作者:行者123 更新时间:2023-12-03 08:50:30 25 4
gpt4 key购买 nike

鉴于下面的脚本,我预计第一次打开对话框时,var2 将在 open 回调之后立即未定义,但第二次将被设置到 123。事实并非如此,它始终是未定义的。为什么?

然后我取消注释var2=111;没有变化??? JavaScript 不是线性执行的吗?显然并不完全,因为它以某种方式“知道” var2 将在此回调中本地定义。我的解释正确吗?

然后,我将 var var2 = 123; 更改为 var2 = 123;,一切按预期工作。

http://jsfiddle.net/q9904tzn/1/

var var1=321;
// var2=111;
var dialog = $('#dialog').dialog({
autoOpen: false,
open: function (event, ui) {
console.log(var1, var2);
var var2 = 123;
},
});
$('#open').click(function () {
dialog.dialog('open');
});

<div id="dialog"></div>
<button id="open">Open</button>

最佳答案

你的 fiddle 中的代码几乎等于下面的代码:

var var1=321;
var dialog = $('#dialog').dialog({
autoOpen: false,
open: function (event, ui) {
var var2; // variable-hoisting
console.log(var1, var2);
var2 = 123; //gets initialized only here
},
});
$('#open').click(function () {
dialog.dialog('open');
});

正如您所看到的,变量 var2 被提升到函数体的顶部,并且在您记录它的下一行中从技术上讲是未定义的。您在登录后为其分配一个值。在记录之前尝试看看当您分配它时它会记录什么。您将获得正确的值。

由于您是在 open 函数中声明变量,因此该变量不会持续存在,并且会在每次执行时重新声明,从而为您提供相同的结果。

关于javascript - 在回调中保留变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32698159/

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