gpt4 book ai didi

Javascript:两个 if typeof undefined 语句给出不同的结果

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

运行 play 框架版本 2.3,尽管它可能不相关:

我有一个包含以下内容的 html 文件:

<html>
<head>
<script type="text/javascript"> if (typeof x === 'undefined') {console.log("x not defined");} else {console.log("in html, x is %s", typeof x);} </script>
<script type="text/javascript" src="javascripts/somescript.js"></script>
</head>
</html>

somescript.js 有这个:

(function() {
jQuery(function() {
if (typeof x === 'undefined') {
console.log("in somescript.js, x is %s", typeof x);
var x = something;
//other stuff
}
});
}).call(this);

当我第一次加载页面时,x 按预期未定义。但是,当我转到同一应用程序中的不同页面然后返回时,控制台会显示:

in html, x is object
in somescript.js, x is undefined

这很奇怪,因为在 html 中,if 语句为 false,但在 somescript.js 中,相同的 if 语句为 true。

为什么要这样做,如何确保两个脚本以相同的方式运行?

最佳答案

这就是变量提升 - 如果您在函数内的任何位置声明变量,它的定义就会提升到顶部。

x = 0;
function y() {
//var x; you don't write it here, but internally this is happening
if (typeof x === 'undefined') {
alert('x is undefined');
var x = 1; //because you use var, you are declaring a new variable x,
//so it gets hoisted to the top
}
}
y(); //alerts x is undefined

但是如果你这样做:

x = 0;
function y() {
if (typeof x === 'undefined') {
alert('x is undefined');
x = 1; //we don't use var, so we aren't redeclaring it, just setting its value
}
}
y(); //nothing happens

关于Javascript:两个 if typeof undefined 语句给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559471/

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