您的位置:首页 > Web前端 > JavaScript

js函数作用域和声明提前

2014-12-02 19:45 253 查看
说到作用域,首先来认识一下常见的两个作用域。

块级作用域(block scope):在一些类c的编程语言中,花括号内的每一段代码都具有各自的作用域。

函数作用域(function scope):javascript的变量在声明它们的函数体以及这个函数体嵌套的任意函数内都是有定义的。

function test(){
for(var i=0;i<3;i++){
console.log(i); // 输出 0 1 2
}
console.log(i); // 输出 3
}

由此可见,i离开循环体,在函数中也是有定义的。

也就是说,js的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。

那么,什么叫声明提前?我们先看一段代码。

var scope = "global";
function test(){
console.log(scope); //输出undefined,而不是global
var scope = "local"; //变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的。
console.log(scope); //输出local
}


刚开始我也以为函数第一行会输出global,因为代码还没有执行到var语句声明局部变量的地方。
然而,由于函数作用域的特性,上述过程等价于:将函数内的scope声明“提前”到函数的顶部,同时变量初始化留在原来的位置。

在块级作用域中,将变量的声明和使用变量的代码靠在一起,是个好习惯;但是在函数作用域中,我个人喜欢将变量的声明放在开头。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息