Javascript中变量和变量优先级定义问题的探讨
请看下面的代码:复制代码代码如下所示:
如果(!(在窗口中的aa){
(哦我的上帝')警报;
var = 1;
}
警报(窗口中的AA);
警报(aa);
回答下列问题:
是不是错了它会弹出多少次
第二个警报是真的还是假的。
第三警报出现了什么
为什么
想一想,然后测试它,如果你正确地回答它,那么以后的文章就不必再看了。
uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d uff0d
在JS中定义变量是很简单的,直接瓦尔河,即使没有var:
复制代码代码如下所示:
var a=1;
这里A是变量名,1是变量的值:
复制代码代码如下所示:
VaR;
警报(a);
Firebug的测试,确定会蹦出来,这是一个非常熟悉的字符串,似乎表明变量是不确定的,但我想我已经变种的定义,但没有价值。
我们来到了一个真正没有定义的事情:
复制代码代码如下所示:
警报(a);
是的,它是直接警告一个从未出现过的变量,这是什么
Firebug是错误的:一个是没有定义的直接。意思是A没有定义。这与前面的代码结合在一起,这让人困惑。这个未定义和未定义的区别是什么
事实上,前面的代码相当于:
复制代码代码如下所示:
var =未定义;
警报(a);
也就是说,在声明变量而不是赋值时,js将将未定义的值传递给变量。注意,这是一个值,表示A已经被赋值,这个值被称为未定义。
而后面的直接警告,变量从来没有出现,也就是说,这是真正的未定义。
简单地说,js中没有无价值变量,它在声明变量时分配。
然后我们看看下面的代码:
复制代码代码如下所示:
警报(a);
var a=1;
这个代码会出错吗由于处于警戒状态,变量A尚未出现。
但是它没有出错,但是它弹出了未定义的值。它表明变量A已经存在,但是这个值不是我们想要的,而是未定义的。有什么问题吗
因为var变量声明与函数声明相同,所以它将提前,事实上上面的代码是这样的:
复制代码代码如下所示:
VaR;
警报(a);
a = 1;
这就是你所知道的。
因此,这个问题的关键是var声明将提前到达作用域的顶部,但是附加的值不会是一个好的纠缠集,我不知道为什么这么做。
现在有一种代码习惯,它主张将变量声明放在作用域的前面,可能考虑到这一点。不管怎样,即使你不提前写,JS也会提前到前面。
现在我们来回答第一个问题:
只有两个警报将被弹出,并且如果不执行警报,因为var声明的前进使得真正的代码看起来像这样:
复制代码代码如下所示:
VaR AA;
如果(!(在窗口中的aa){
(哦我的上帝')警报;
aa=1;
}
警报(窗口中的AA);
警报(aa);
虽然AA是空的,这将是真正的when'aa'in窗口来判断,因为一个不存在的价值是不确定的。因此,如果代码不执行。我不说接下来的两警报。
个人感觉这是一个荒谬的问题,我们应该了解他的理由,但他鄙视陷阱。
上面的问题也是我写这篇文章的原因。我从网络文本中看到了这个代码,但是没有答案。我不能骑我的妹妹在上面跑StackOverflow问它。答案是文章。
但事实上这是一个非常基本的问题!!!!
哈哈,原谅我。后面还有一个问题:
复制代码代码如下所示:
var
警报(b.aa);
警报(b.aa。BB);
这也是声明变量的一种方式,那么这个代码错了吗为什么