JavaScript中存在变量作用域,函数作用域和声明提前三种与作用域相关的内容
变量作用域
定义 : 一个变量的作用域是程序源代码中定义这个变量的区域。
特点 :
1. 全局变量拥有全局作用域
2. 函数内声明的变量只在函数体内有定义,它们是局部变量,作用域是局部的
3. 函数的参数也是局部变量,只在函数体内有定义
4. 函数体内局部变量优先级高于同名的全局变量
var scope = 'global'; // 全局作用域
function checkscope() {
var scope = 'local'; //局部作用域
return scope;//返回局部变量而不是全局变量的值
}
checkscope();
函数作用域
定义: 变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的
function test (s){
var i = 0;//i在整个函数体内都有定义
if ( typeof s == 'object'){
var j = 0;//j在整个函数体内都有定义,不仅仅是这个代码块内
for(var k = 0;k<10;k++){ //k在整个函数体内都有事有定义的,不仅仅在循环体内
console.log(k);//输出0-9
}
console.log(k)//k已经定义了,输出10
}
console.log(j)//j已经定义,但是可能没有初始化 undefined
}
声明提升
定义:JavaScript的函数作用域是指在函数内声明的所有的变量在函数体内始终是可见的,这意味着变量在声明之前甚至可用
function f(){
console.log(scope) //undefined
var scope = 'global';//变量在这里赋初始值,但变量本身在函数体的任何地方均有定义
console.log(scope)//global
}
等价于下面的函数
function f(){
var scope ;
console.log(scope)//变量存在,但其值是undefined
scope = 'global';
console.log(scope)//global
}