Javascript功能范围和提前声明共享

有些语言,如C和java,有块级的范围,即大括号中的每个代码都有各自的适用范围和变量在外部是不可见的代码段,但Javascript没有块scope.javascript使用功能的范围,即变量的任何函数,声明自己的函数体定义和嵌套函数体,即在函数中声明的所有变量都在函数体中可见。这意味着可以使用之前声明变量。此功能称为前面的声明,请看一个示例。
复制代码代码如下所示:
var test1 =中;
函数测试(){
console.log(test1);
var test1 =局部变量;
console.log(test1);
}

上述功能的结果是输出定义的先局部变量。
很多人错误地认为结果是:第一输出中,然后输出的局部变量。事实上,由于职能范围的特点,在函数中局部变量总是被定义,即在局部变量覆盖同一全局变量的函数体内,但只有在程序对var语句的执行,局部变量将真正的任务。作为一个结果,过程相当于提前声明的变量在函数的函数体的顶部,而变量是在原位置初始化。它为以下功能相同
复制代码代码如下所示:
var test1 =中;
函数测试(){
var test1; / /声明的变量在函数事先最高的功能
console.log(test1);
test1 =局部变量; / /分配
console.log(test1);
}

但是,如果函数没有用VaR声明变量,情况就不同了。
复制代码代码如下所示:
var test1 =中;
函数测试(){
console.log(test1);
Test1 = localVariable;
console.log(test1);
}

这个函数的结果是输出中第一,然后输出局部变量。
由于在函数test1变量不使用var声明,它默认为一个全局变量,当然,没有提前声明变量的问题。第一行输出中