码迷,mamicode.com
首页 > Web开发 > 详细

js作用域

时间:2017-08-15 10:18:55      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:define   词法分析   预编译   local   对象   一个   声明   str   ons   

function t() {

console.log(str); /*此时内部已经有了AO对象 undefined*/
var str="local"; /*执行到此的时候如果AO对象没有赋值就赋值*/
console.log(str)
}
t()

/*
函数作用域是在声明的时候决定的而不是在执行的时候决定的
作用域链

作用域
t保护 p


外层作用域windows

 

作用链
p没有去t找。t没有去windows找


函数作用域在函数申明的时候决定


二,词法分析
函数执行前,会进行预编译,这个就是词法分析。会在解释器内部会
形成一个活动对象,AO


1,分析函数的参数
2,分析函数的变量声明
3,分析函数的函数声明

 

1,分析函数的参数
如果没有参数,AO对象上没有任何属性
AO.str=undefined

2,分析函数的变量声明
AO.str=undefined 词法分析的时候是undefind

3,分析函数声明表达式
AO.str=function

 

执行的过程是在AO对象上去找。

分析实例:

function t(age) {
console.log(age); /*undefined*/
var age=99; /*undefined*/
console.log(age);

function age() { /*age=function */
}

console.log(age)
};
t(5)


/*

执行之前词法分析
1,函数参数undefined
AO.age=function

2,分区函数变量声明
如果有值不做处理。没有值赋值
AO.age=undefiond

3,函数声明表达式
AO.age=funtion

执行过程先从自己的AO里面找。
第一步
AO.age=function 输出function

第二步
AO.age=99 输出99


第三部
如果没有赋值赋值,如果赋值了会再次赋值
AO.age=99 输出99

js作用域

标签:define   词法分析   预编译   local   对象   一个   声明   str   ons   

原文地址:http://www.cnblogs.com/tiantao36/p/7363024.html

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