javascript的重要知识

important

词法分析
- 词法作用域:函数在定义它的作用域中执行,而不是在调用它的作用域中执行。

作用域
- 还不错的作用域讲解
- 无块级作用域,函数限定变量作用域,try{}catach(){}会产生类似的块级作用域。
词法作用域和动态作用域区别

var a = 2;
function foo() {
console.log( a );
}
function bar() {
var a = 3;
foo();
}
bar();
  1. 如果处于词法作用域,也就是现在的javascript环境。变量a首先在foo()函数中查找,没有找到。于是顺着作用域链到全局作用域中查找,找到并赋值为2。所以控制台输出2
  2. 如果处于动态作用域,同样地,变量a首先在foo()中查找,没有找到。这里会顺着调用栈在调用foo()函数的地方,也就是bar()函数中查找,找到并赋值为3。所以控制台输出3

总结:javascript是遵循词法作用域的,但是在用到this的时候是遵循动态作用域的。

if(true) {
 var num = 10;
}
alert(num);//运行的结果是弹窗10.
------
var func = function() {
 var num = 10;
};
try {
 alert(num);
} catch ( e ) {
 alert( e );
}//这段代码运行时,会抛出一个异常,变量num没有定义.也就是说,定义在函数中的变量无法在函数外使用,当然在函数内可以随意的使用, 即使在赋值之前.
  • 变量名提升与函数名提升(ES6将不存在这一现象)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值