JS的变量的作用域可分为全局变量和局部变量
在JS函数内部可以直接读取全局变量,在函数内的局部变量外部是无法读取的,注意:局部变量必须用var命令声明,否则声明的实际是一个全局变量
- 从外部读取局部变量,需要在函数内再建立一个函数
function f1(){
var n=999;
function f2(){
alert(n); // 999
}
}
此时,包含在f1中的f2就可以调用在f1中声明的局部变量n,父对象的所有变量,对子对象都是可见的,反之则不成立。
此时只需将f2作为返回值就可以看见f1中的局部变量了
作用域链实例
var a=1;
function fn1(){
function fn3(){
var a =4
fn2()
}
var a=2;
return fn3;
}
function fn2(){
console.log(a);
}
var fn=fn1()
fn()//1
输出fn()即输出fn1(),fn1返回值为fn3,fn3调用了fn2,fn2的输出结果为变量a的值,而fn2内部没有变量a,向其上一级即fn2的同级寻找,可以找到全局变量var a=1,因此最终的输出为1
在这里也遵守变量提升的规则
JS中的变量类型
- 基本类型:数值,布尔值,字符串,null和undefined,指的是保存在栈内存中的简单数据段
- 引用类型:对象、数组、函数、正则,指的是保存在堆内存中的对象,变量中保存的实际上只是一个指针,一个地址,这个指针执行内存中的另一个位置,由该位置保存对象
网友评论