为了账号安全,请及时绑定邮箱和手机立即绑定

javascript在网上都找不到答案的问题

javascript在网上都找不到答案的问题

GCT1015 2018-08-10 10:10:39
例子1结果:undefined5local例子2结果:global5local问题1:将例子1的scope改为例子2的kkk后,结果就不一样。作用域是一样的,scope不是关键字也不是保留字,为何会这样?例子3:问题2:例子3中将name,改成其他变量名,就会正常了。上面3个例子均是在firefox46.0.1得到的结果IE11:例子1和2 将console.log改成alert后结果与firefox一致,例子3 alert(delete name)都是false。其他IE版本号没试过如果将例子12的scope 改成name 将例子3中的name 改成scope 则结果就正常了有哪位大牛能解释这神奇的现象吗?(查过scope name 都不是ECMA组织定义的关键字或是保留字)谢谢!
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

解答一
JS在解析一段代码的时候,会先使用var给声明某个变量,然后才执行代码。在例子一当中,你在函数t声明了scope变量,这时scope变量的作用域在函数范围内。所以你在第一次打印scope时值为undefined,直到赋值为"local"后,scope才有值。

var描述

变量声明无论出现在代码的任何位置,都会在任何代码执行之前处理。使用var语句声明的变量的作用域是当前执行位置的上下文:一个函数的内部(声明在函数内)或者全局(声明在函数外)。

解答二
使用var声明的变量,默认的configurable属性是false,所以你是无法删除的,而namewindow的一个属性,configurable是true。

delete描述

delete 操作符用来删除一个对象的属性。
在严格模式中,如果属性是一个不可配置(non-configurable)属性,删除时会抛出异常,非严格模式下返回 false。其他情况都返回 true。


查看完整回答
反对 回复 2018-09-28
  • 1 回答
  • 0 关注
  • 625 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信