草依山的Javascript世界

一个Javascript程序猿的学习纪录剩地,不仅仅是JS,还有Linux、Mac、nodeJs、吃、玩!

小例子一个

好久没写东东了,有点占坑不拉屎。。。 :(

a(1);  //alert( n )
function a( n ){
    alert( n );
}
a(1); //TypeError a is not a function
var a = function ( n ){
    alert( n );
}

解释: 两种写法及它们的区别本质在于js引擎在解析时,会先预读function a()这种,而不会预读var a = function这种。

看另一个小应用 一般黑客做xss测试的时候会alert, :),那么我们监控一下alert函数 错误:

var _alert = alert;
function alert( p ) {
    _alert( p );
    console.log( location.href)
}
alert( 123 );// 循环引用,出错

正确:

var _alert = alert;
alert = function( p ){
    _alert( p );
    console.log( location.href)
};
alert( 123)

错误的写法错的原因在于,引擎在解析js时,已经用自定义的alert把宿主对象window的原有alert给重写了,_alert指向的是自定义的alert函数,而非宿主对象window的原有alert,这样就导致了循环引用,自己圈圈自己了

文章地址: 小例子一个
欢迎关注我的微博与我交流:@草依山
Github上也有一些东西:[Github]
所有文章坚决抵制jb51.net的转载!
2012-08-02

相关文章

2017-03-22 一次算PI的小尝试
2017-02-13 new做了些什么
2016-09-29 [翻译]bash的各种文件载入执行顺序
2016-05-31 phantomjs在linux下截图中文字体问题
2016-04-24 Promise的错误处理

文章修改纪录

加载中...
Copyright © 2013. Create By 草依山, Fork