javascript札记

也不知道以后会不会再补充

帮人借了本书,正好看了一只没搞明白的作用域一章,写几句


javascript没有C等语言的块作用域,真是个神奇的特性,也就是说{}完全不限制作用域

就我所看到的,只有定义函数才会对变量的作用域有影响

另外还有一个神奇的事情,不多说,直接上例子

var gscope=’hello';

function f(){

alert(gscope);

var gscope;

gscope = ‘world’;

}

f();


以上代码打出的是undefined,因为进入f()以后,gscope已经变成本地的那个变量了

javascript的变量名deference的过程:

解释器维护了一个作用域链,从上往下是全局对象的上下文,然后依次是调用的函数的调用对象(call object)

类似java的call stack顺序

以上的里子就是 f()的cb->全局对象

也就是现在f的cb里找gscope,没找到的话在全局对象里找

不幸的是找到了,而且还是未定义!

这个逻辑打乱了以前的编译语言的思维惯性

在于javascript允许在声明前使用变量,不声明的话默认为全局变量,不管行文顺序,只找作用域链!

(找到最后没找到的话,如果是赋值语句,就加到全局对象的属性中,不然就报错,ms是这样,为考证,摘自javascript权威指南)

之前看了一些python,一直也没搞明白,好像也是有什么作用域链,啥时候有空整整明白



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值