var x=1; 测试(); 功能测试(){ console.log (x)//1 } 功能测试(){ console.log (x)//定义 var x=10; } 功能测试(){ console.log (x)//1 x=10; console.log (x)//10 }
强>
执行到测试的时候X作用域没有变直接打印全局X <强> 强>
可以这样理解在执行方法的时候第一步执行的是变量的声明然后才是后面的逻辑代码
var X=1 功能测试(){ alert('好的') console.log(“好”) var x=100 } 功能测试(){ var x; alert('好的') console.log(“好”) x=100; }
上面第二种测试就是第一种测试在JS解析时候的执行过程执行到测试方法时先把声明变量的部分挪到前面确定变量的作用域;赋值的地方不变;第二种测试x=100此时的x只是局部赋值
函数内容的var是局部赋值不带var的直接赋值是全局的
功能测试(){ x=1 } console.log (x)//定义 测试(); console.log (x)//1