手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >JAVASCRIPT函数作用域和提前声明 分享
JAVASCRIPT函数作用域和提前声明 分享
摘要:一些语言如C、java都有块级作用域,即花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,但是javascr...

一些语言如C、java都有块级作用域,即花括号内的每一段代码都具有各自的作用域,而且变量在声明它们的代码段之外是不可见的,但是javascript没有块级作用域。javascript使用函数作用域,即变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的,也即函数内声明的所有变量在函数体内始终是可见的。这样就意味着变量在声明之前就可以使用,这个特性被称为"声明提前",即javascript函数里声明的所有变量都被提前至函数的顶部。来看个例子。

复制代码 代码如下:

var test1 = "globalVariable";

function test(){

console.log(test1);

var test1 = "localVariable";

console.log(test1);

}

上述函数执行的结果是:先输出"undefined",再输出"localVariable"。

很多人都会误以为结果是:先输出"globalVariable,再输出localVariable"。其实不然,由于函数作用域的特性,局部变量在整个函数体始终是有定义的,也即,在函数体内局部变量遮盖了同名全局变量,但是只有在程序执行到var语句的时候,局部变量才会被真正的赋值。因此,上述过程相当于,将函数内的变量声明提前至函数体顶部,同时变量初始化留在原来的位置。就相当于如下这个函数

复制代码 代码如下:

var test1 = "globalVariable";

function test(){

var test1;//将函数内的变量声明提前至函数顶部

console.log(test1);

test1 = "localVariable";//赋值

console.log(test1);

}

但是,如果函数内没有用var声明变量,情况又有所不同。

复制代码 代码如下:

var test1 = "globalVariable";

function test(){

console.log(test1);

test1 = "localVariable";

console.log(test1);

}

这个函数执行的结果是:先输出"globalVariable",再输出"localVariable"。

由于函数体内的test1变量没有用var声明,就默认为全局变量,当然就不存在变量提前声明的问题。第一行就会输出"globalVariable",而第三行改变了test1全局变量的值,输出了"localVariable"。

【JAVASCRIPT函数作用域和提前声明 分享】相关文章:

javasript实现密码的隐藏与显示

JS函数实现鼠标指向图片后显示大图代码

DEFER怎么用?

JavaScript中的函数嵌套使用

javaScript中with函数用法实例分析

浅谈angularJS 作用域

在b/s开发中经常用到的javaScript技术

JavaScript中exec函数用法实例分析

javascript常用的方法分享

解密效果

精品推荐
分类导航