javascript中标识符的改进问题

JS有一个可变的推广,这实际上是一个设计不良的副作用,或语言实现。它允许变量被访问未声明或声明以后使用。新手对此很困惑,甚至很多JS岁手的使用也更为困惑。然而,经过6加入我们/ const变量提升不存在。

1。变量没有声明并直接使用。


函数测试(){
警报(计);
}
(测试);



犯错误是很自然的。


两。变量声明在结尾处。


函数测试(){
警报(declaredbutnotassigned); / /未定义
无功declaredbutnotassigned;
}
测试();



输出的未定义,比上面的改进,没有错误,代码可以运行,但变量的值可能不是程序员所期望的。

三。变量声明位于最后,并将变量赋给变量。


函数测试(){
警报(declaredandassigned); / /未定义
无功declaredandassigned = 1;
}
测试();



结果与两个结果相同,很明显,由于赋值,它不输出1。

二,三个变量的增强(提升),简单定义

变量提升:在指定的范围内,在声明使用后它是可变的,但是运行时变量的可访问性被提升到当前范围的顶部。它的值是未定义的,并且没有可用性。

重点放在代码顺序和操作顺序上,因为我们大部分时间写代码是按顺序执行的,也就是说,代码顺序和操作顺序是一样的,它也符合人脑的思维过程,例如一个有C语言经验的程序员。


#包括
int main(){
int=1;
printf(%d
}



两行代码,首先声明整数类型x,然后输出。代码顺序与运行顺序一致,即正常运行。

如果订单是轮流的


#包括
int main(){
printf(%d
int=1;
}



在这一点上,编译不能被传递,但js可以依次写入,见两个或三个。

因此,具有C语言经验的程序员非常清楚,首先需要声明变量,否则将报告错误。

四。函数表达式中也有变量的提升。


函数测试(){
警报(函数);未定义的
Var(函数=){ };
}
测试();




但是如果你想使用这个函数,那是不可能的。


函数测试(){
警报(函数);未定义的
(函数);报告异常
Var(函数=){ };
}
测试();



因此,函数是未定义的,调用函数将报告异常。

可访问性:警报(函数)、输出未定义、运行和访问函数。

可用性:函数(),报表异常,不能正常调用函数,表示不可用。

两个或三个和四个都是由变量声明的变量。js中的函数声明也会增加,但是这个变量是特殊的。它是一种函数类型。它可以用作函数、方法或构造函数,其名称(标识符)也将被提升到当前范围的顶部。

五,函数声明的名称也将被提升到当前作用域的顶部。


函数测试(){
警报(F1);
(F1);
函数f1(){
警报('called);
}
}
测试();



正如我们看到的,F1声明位于代码的结尾,F1被使用之前,警报(F1)和f1()通常被执行,表明可访问性和可用性都是可用的。

正如我们之前所说,变量提升是没有用的,这是一个糟糕的语言设计,一个好习惯或第一句话。这个特性也会出现在许多大公司的访谈中。

问题1:




编写以下代码操作结果
var a=1;
函数FN(){
如果(!一){
var a=2;
}
警报(a);
}
(FN);



问题2:


编写以下代码操作结果
var a=1;
函数FN(){
a = 2;
返回;
函数(a){
}
(FN);
警报(a);




但这一切结束的到来让 / const ES6。在ES中,除了全局变量外,其他的变量都使用LET常量,而VaR则被替换。


函数测试(){
警报(declaredbutnotassigned1); / /报告异常
警报(declaredbutnotassigned2); / /报告异常
警报(函数);

让declaredbutnotassigned1;
让declaredbutnotassigned2 =真;
让(函数=){ };
}
测试();



这种强制程序员要养成良好的习惯,需要声明和重用变量,否则就错了。

从MDN的描述,让不提高变量如下

复制代码代码如下所示:

在ECMAscript 6,让不提升变量块的顶部。如果你引用变量块中声明之前,让遇到的变量,这样的结果是一个referenceerror,因为变量是一个死区时间从块开始申报处理。



在声明变量类型与让,不再是安全的


如果(条件){
警报(typeof Num); / /错误!
设数字= 100;
}





在您可以使用typeof = = 'undefined ',以确定是否一个库的介绍,如jQuery


以确定是否引入了jQuery。
如果(typeof = = 'undefined{ $!)
做某事
}…



jQuery还没有被引入,并且$还没有被声明,它不会出错并且影响下面的代码执行,但是如果它是一个声明,它将被错误地报告。

以上是本文的全部内容,希望大家能喜欢。