JS变量的声明
var x = 1;test();function test(){ console.log(x) //1}function test(){ console.log(x) //undefined var x = 10;}function test(){ console.log(x) //1 x = 10; console.log(x) //10}
大前提:Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域
第一种test写法 X先在外层被声明了全局作用域 执行到test的时候 X作用域没有变 直接打印全局x
第二种test写法 X先在外层被声明了全局作用域 执行到test时候 x作用域被声明为局部作用域 而此时局部作用域的x并没有赋值 赋值是在console之后才发生的
第三种test写法 X先在外层被声明了全局作用域 执行到test的时候 X没有被声明为局部作用域 所以x仍然为全局作用域 故第一个可以打印出1
可以这样理解 在执行方法的时候 第一步执行的是变量的声明 然后才是后面的逻辑代码
var x = 1function test(){ alert('ok') console.log('ok') var x = 100}function test(){ var x; alert('ok') console.log('ok') x=100;}
上面第二种test就是第一种test在JS解析时候的执行过程 执行到test方法时 先把声明变量的部分挪到前面 确定变量的作用域; 赋值的地方不变; 第二种test x=100 此时的X只是局部赋值
函数内容的var是局部赋值 不带var的直接赋值是全局的
function test(){ x= 1}console.log(x)//undefinedtest();console.log(x)//1
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。