码迷,mamicode.com
首页 > 其他好文 > 详细

作用域与变量提升

时间:2018-03-11 17:25:26      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:ret   除了   var   就是   函数   优先   重置   变量   第一个   

作用域与变量提升


作用域

JS中变量的作用域有全局作用域和局部作用域两种,作用域简单来讲就是变量与函数的可访问范围。

  • 全局作用域:
    1.最外层函数和最外层函数外面定义的变量。
    2.未声明直接赋值的变量,自动声明为全局变量。
    3.window对象的内置对象,如window.name,window.location。
  • 局部作用域:
    一般会出现在函数内部,只有固定的代码段才可以访问。

    局部作用域变量优先于全局变量,函数只是一个作用域的基本单位。

例1:
var name = "one"; function test() { name = "two" } test(); console.log(name) //输出为 two
解析
??函数内部省略var,会影响全局变量,name被重置为全局变量。js中,函数是一个作用域的基本单位,函数内声明的所有变量在函数体内始终是可见的。

例2:
function test() { var name = "one" ; return function () { console.log(name) } } test()();

test()之后将调用外层函数test返回内层函数function,再继续(),相应调用执行了内层函数function(),输出name。

变量提升

声明提前是在js预编译是就进行了,变量提升知识提升变量的声明,并不会吧值也提上来。

例1:

var name = "one" ;
function () {
   console.log(name)   //one
   name = "two" ;
   console,log (name)  //two
}
test();
var name = "one" ;
function () {
   console.log(name) ;    //undefine
   var name = "two" ;
   console.log(name)      //two
}
test()

解析:
局部优先于全局,预编译(变量提升),所以函数内的name为局部变量,所以第一个位undefine。

内部不影响外部

function test(name) {
   console.log(name)    //name
   name = "two"
   console.log(name)    //two
}
var name = "one"
test(name)
console.log(name)      //one

解析:
??传进test的,实际上是一个副本,函数返回后这个副本就被清除了,并非实际的name。

作用域与变量提升

标签:ret   除了   var   就是   函数   优先   重置   变量   第一个   

原文地址:https://www.cnblogs.com/hmBlog/p/8543990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!