评论
2123084
2011-03-19 18:50
学习了
回复 引用 查看
2011-03-19 22:54
var test = 3; // 这种其实创建的是一个variable
test = 3; // 这种其实是在global下创建一个property
window.test = 3; // 同上一种,但通用性不好,不在浏览器环境下会出问题
所以比较正统的符合ecma的应该是global.test = 3;
但是一般来说global是访问不到的,那么就得想办法弄出来
按ecmav3的标准来说,正常调用一个函数的话,其内部的this就是global,所以这么写
var global = (function() { return this; }());
但是ecmav5又出了一个strict模式,在该模式下,如果正常调用一个函数,其内部的this是undefined
好在ecmav5里又有indirect eval call,这在你的另一篇中有提到过,indirect eval call永远在global下执行,所以那个时候的this就是global了
var global = (1,eval)('(this)');
所以综合一下,获取global的方法是:
var global = (function() { return this || (1,eval)('(this)'); }());
再随后global.tes = 3;就安全了
回复 引用 查看
2011-03-19 22:55
回复 引用 查看
2011-03-19 23:37
引用var test = 3; // 这种其实创建的是一个variable
test = 3; // 这种其实是在global下创建一个property
这两种都是在variableobject上添加一个属性.区别是一个具备可删除特性,一个不具备这个特性.
不过早期的firefox,大概是2之前的版本,有一个实现上的bug.多某个标识符赋值,可能会发生特性上的修改,比如本来具备不可删除特性的,变量,会因为赋值运算,导致该属性的 不可删除特性被去掉.
对于获取global这个事, gray zhang,已经开始考虑严格模式了?
另外楼主提到的 ie下in 和 for in 的区别,确实是ie实现上的bug.
引用用with打开对象window闭包时,所有浏览器也表现一致,如下
我个人对这个with打开闭包的说法,持反对态度. 我认为爱民大哥,之所以在其语言精髓与编程实践中有这一说发,源自于当时他对闭包概念的错误理解. 所以这一说法是不恰当的.
回复 引用 查看
2011-03-19 23:54
@franky
strict模式其实很多思想蛮合理的,比如不要不使用var来定义全局变量,以及不要随意删除属性等
而且使用firefox 4.0的话,其console在strict模式下会报出不少的warning可以便于检查代码
所以我现在写js一般是先加上'use strict',到上线的时候再去掉的
回复 引用 查看
2011-03-20 00:05
引用gray zhang:
@franky
strict模式其实很多思想蛮合理的,比如不要不使用var来定义全局变量,以及不要随意删除属性等
而且使用firefox 4.0的话,其console在strict模式下会报出不少的warning可以便于检查代码
所以我现在写js一般是先加上'use strict',到上线的时候再去掉的
恩,我始终觉得edition5是个过渡产物. 我对这一版本,毁誉参半. 尤其是严格模式.可能我在说老道太个人主观化的去制定edition5的同时,自己也太主观了些.是该更加开放的去接受的时候了.
回复 引用 查看
#7楼[楼主]
2011-03-20 19:07
@franky
@gray zhang
你们俩的讨论使我一天都在思考,查看相关资料。而没有匆忙回复。谢谢你们。真想拥抱下!o(∩_∩)o~
回复 引用 查看
2011-03-20 20:03
呵呵,经过讨论,甚至是争论,大家都能对知识,有重新的认识.楼主不要怪罪,我总来吹毛求疵就好.
回复 引用 查看
2011-03-21 09:40
多谢分享。
回复 引用 查看
#10楼[楼主]
2011-03-21 09:42
@franky
教主客气了。是有点找到知音的感觉。
回复 引用 查看
2011-06-11 22:20
楼主,我在ie9和chrome试了
var a2 = 22;
try{
alert(delete a2);}
catch(e){alert('无法delete a2')}
结果都是true?
回复 引用 查看
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/