作用域(一定要掌握好 面试题 题海战术)
1,作用域: 变量起作用的区域,也就是说变量可以被访问到的区域。
2,变量种类
*全局变量 :在script标签下不在任何函数内生命的变量称为全局变量
作用范围是整个页面,生命周期跟页面一样。页面销毁才没了
*局部变量: 在函数内声明的变量,称为局部变量
作用范围是再指定的函数内,函数执行完毕就会被销毁。(内存中占用的资源回收)
3,词法作用域:静态作用域。再js预解析阶段,确定变量的作用域。
在词法作用域中规定,变量的作用域由其定义的位置决定,而不是使用的位置。
在词法作用域下,只有函数可以限定作用域。
变量的搜索原则
1,首先在当前作用域查找,如果找到就直接使用该变量的值。停止查找。
2,如果没有,就往上一层找,如果有就是用,停止。
3,没有 继续找。一直到全局作用于。如果找到就是用。否则,就抛出引用异常。
作用域链
1函数可以限定作用域,而且可以嵌套使用。所以会产生作用域链式结构
2,script标签所限定的全局作用域为 0 级链
在该链上如果遇到函数,就引申出另一条作用域链,级别为当前级别+1;
以此类推。
3,高级练可以访问同一条链上的低级链的数据。但是反之则不行。同级链上的数据不能互相访问。
在访问不存在的变量时,不仅会报错。性能还会降低。
js预解析(主要是面试题)
1,语法分析: 分析js代码是否满足js语法的定义。如果在分析某行时,检查出不符合语法规则就直接在语法分析阶段(预解析阶段)抛出语法异常
目的:保证js代码符合语法规则,能被正确执行。
2,变量名以及函数名提升
在变量名和函数名提升时,是将变量的定义以及函数的定义包括函数的实现都提升到当前作用域的最顶端
函数名提升时,相当于定义一个变量即该函数的名字,在把函数的引用赋值给该变量
函数有形参时。就相当于 var a; 函数体里有var a;就会被忽略。
3,确定变量的作用域。 按照链 找
TIPS
window对象 自带undefined属性,其值为undefined。
window.undefined=undefined
in
1.语法:‘proName’ in对象
*in 运算符 左边的参数类型 必须是字符串 不是会隐式转换成字符串
*in 右边的参数 类型必须是对象,不是会隐式转换,如果转换失败会抛出异常。
2,功能: 判断对象是否能访问proName属性,如果是自己本身的属性 或者是继承下来的 都会返回true。
猪八戒网站
网友评论