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 = 1 function 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)//undefined test(); console.log(x)//1
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。