不论我们前面讲到的for, if等语句还是function,后面有一对{}比如
for(var i = 0; i < items.length; i++){
//“{”和“}”之间有代码
}
if(some_express){
//“{”和“}”之间有代码
}
function(param1){
//“{”和“}”之间有代码
}
所有{}包起来的代码,都可以称之为 “代码块” , 英文名叫Block。
在函数中定义的变量在函数外不能获取
每个代码块都有一个自己的作用域,作用域决定了变量能否被访问(不论读取变量还是修改变量)。
在最上层没有任何{}包裹的作用域为顶层作用域,声明的变量是哪里都可以访问的。
代码块是有层级的,在一个代码块里写的新的代码块,后者是前者的子作用域
当局部变量与全局变量重名时,局部变量会覆盖全局变量
var num = 1; //声明一个全局变量
function func() {
var num = 2; //声明一个局部变量
return num;
}
console.log(func()); //输出:2
函数作用域变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的
function func() {
console.log(num); //输出:undefined,而非报错,因为变量num在整个函数体内都是有定义的
var num = 1; //声明num 在整个函数体func内都有定义
console.log(num); //输出:1
}
func();
for(var i = 0; i < items.length; i++){
//“{”和“}”之间有代码
}
if(some_express){
//“{”和“}”之间有代码
}
function(param1){
//“{”和“}”之间有代码
}
所有{}包起来的代码,都可以称之为 “代码块” , 英文名叫Block。
在函数中定义的变量在函数外不能获取
每个代码块都有一个自己的作用域,作用域决定了变量能否被访问(不论读取变量还是修改变量)。
在最上层没有任何{}包裹的作用域为顶层作用域,声明的变量是哪里都可以访问的。
代码块是有层级的,在一个代码块里写的新的代码块,后者是前者的子作用域
当局部变量与全局变量重名时,局部变量会覆盖全局变量
var num = 1; //声明一个全局变量
function func() {
var num = 2; //声明一个局部变量
return num;
}
console.log(func()); //输出:2
函数作用域变量在声明它们的函数体以及这个函数体嵌套的任意函数体都是有定义的
function func() {
console.log(num); //输出:undefined,而非报错,因为变量num在整个函数体内都是有定义的
var num = 1; //声明num 在整个函数体func内都有定义
console.log(num); //输出:1
}
func();