1、javascript没有块级作用域,无块作用域限制,局部环境销毁
function changeColor(){
for(var i=0;i<3;i++){
var num=0;
num=i
}
alert(num)//3
}
console.log(num)//undefined
(1)无块作用域限制:在这里alert(num)正常输出num的值,因为javascript没有块级作用域,alert()不会访问不到num(但在c,c++,Java中有块级作用域)
(2)局部环境销毁:num仍然作为一个变量被写入changeColor执行环境对象,因为changeColor执行环境在执行完后,环境销毁,num变量不存在
2、不使用var声明的变量被写进全局环境
function changeColor(){
for(var i=0;i<3;i++){
num=i;
}
alert(num)
}
console.log(num)
//console打印出num值,使用var的变量被添加到最近的执行环境中,不使用var添加到全局环境中
3、变量属于哪个域是定义时确定不是调用时确定,变量搜索顺序为从内到外
var color="red"
var fu=function(){
console.log(color)
var color="blue"
}
fu()
//结果:undefined
var color="red"
var fu=function(){
console.log(color)
}
fu()
//结果:red
(1)变量属于哪个域是定义时确定不是调用时确定:定义函数时,fu对象域中有变量color,全局环境中有变量color,
(2)执行时console.log()从内到外搜索到color属于fu对象,但此时color只声明未被初始化,结果为undefined
4、全局对象:在任何地方可被访问,模块化编程避免使用
最外层定义变量
全局对象的属性
未定义直接赋值的变量
网友评论