num1:
ba = function(a) {
return a.call.apply(a.bind, arguments)
}
(以上的代码出之于google的adsence广告投放的代码)
单纯的call和apply其实好解释,但如果想上面这样写,就有点绕了。
下面来分析上面这种写法
<script>
var obj = { name : "cc"};
var fun = function(){
alert(1);
};
var fun2 = function(){
alert(2);
};
alert(fun.call);
alert(fun.call.apply);
//c = fun2.call.apply(obj, ["123",12,676]);
//error:Function.prototype.call called on incompatible [object Object]
c = fun2.call.apply(obj, ["123",12,676]);
//alert:1,arguments:[0] = 12 [1] = 676,this:"123"
</script>
得到以下结论:
1.fun2.call.apply相当于Function.prototype.call.apply
2.fun2.call.apply第一个参数是不能为obj,因为只有Function对象才有此方法,
3.fun2.call.apply(fun, ["123",12,676])可以简化为fun.call("123",12,676所以fun2.call其实只是浮云,call只能function才能调用,也揭示了call的底层实现:将第一个参数作为fun(call的调用者)的this,其他的作为参数
a.call.apply(a.bind, arguments)在看这段,为什么要这样写?
在于作者想让arguments里面第一个参数取代a.bind里面的this,那么可以这样:
var o = [].shift.call(arguments);
a.bind.apply(o,arguments);
这么说这句的目的有这些:简洁,犀利,你看不懂,作者很牛B,这还仅仅只是google投放的前10行里面的内容,哭啊~~~
num2
js获取函数调用者的函数名(原创)
(function(){
B();
})()
function B(){
var fun = arguments.callee.caller ? arguments.callee.caller : window;
var fun_name = /^function\s+([^\(]*)\(/.exec(fun+"");
fun_name = fun_name ? fun_name : "";
alert(fun);
alert(fun_name);
}
num3
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)
这句没出我意料的话,你应该没看懂,这句的结果输出的alert(1);
解析:
$=[] //$ : []
!$ //false
!$ + [] // false
(小结:[].toString()//"",-[]//0,[].valueOf()//[],这种结果显然[]直接调用的toString了,这里就牵涉到隐式转化问题,如果两个都不数字就当做字符串处理,所以结果是"false",由此确定第二个变量__ : "false")
~$ //-1
(小结: $:[[]], ~$,-$,+$相当于~"",-"",+""//结构都是-1,0,0可以暂时下个结论,数组参与数值运算的时候,都会转化成字符串在进行计算,但是-[1]//-1,-[1,2]//NaN,-[]//0 当只有一个数据的时候数组会原样输出,没有默认为0,现在后者站得住脚一些)
-~-~-~$//3
(小结:类似的方法可以求数组下标)
{}+$ //[object Object]
(小结,$ + {}//[object Object] )
!''//true
$$=($_=!''+$)[_/_]+$_[+$])]//"true"[1] + "true"[0] : "rt"
[_/_]//1
通过上述分析 得出:
$ == 未知
$$ == "rt"
$_ == "true"
_ == 3
__ == "false"
(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])简化为:
("false")[3] + ("[object Object]")[1] + ("true")[1] + "true"[0]
即 : "s" + "o" + "r" + "t" //"sort"
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])() 简化为:
($=[]["sort"])()
$ == sort(Fun)
相当于给window对象增加了sort属性,而且sort返回的是this对象,这样就可以产生window对象,相当巧妙的地方
[__[_/_]+__ [_+~$]+$_[_]+$$](_/_) 简化为:
["false"[1] + "false"[2] + "true"[3] + "true"](1)
["a" + "l" + "e" + "rt"](1) //"[alert](1)"
window["sort"]()["alert"](1) -> window["alert"](1)
这种模糊代码的方式和手段很不错,值得借鉴和参考,可以越过脚本过滤,执行你想执行的
num4
document.write问题
<script>
document.write("<div id=\"webs\"></div>");
var ele = document.getElementById("webs");
alert(ele); //null
</script>
这结果有点纳闷,今天问了鹏哥才知道,原来document.write真正写入的时间是在当前script执行完之后才进行写入,所以在getElementById是不存在此元素的
处理方法:
<script>
document.write("<div id=\"webs\"></div>");
</script>
<script>
var ele = document.getElementById("webs");
alert(ele); //div
</script>
num5
for (var j = 0, len = d.length >>>0; j < len; j++) {...
今天看鹏哥里面有样一种写法d.length >>>0,第一次见过这种写法有点诧异,后来问了一下,这种写法的好处在于如果d.length假设为undefined会自动变为0,如果存在则任是d.length,利用了js里面隐身转化
num6
世上最短判断ie浏览器的方法
var ie = !-[1,]
only 6byes,这种写法真是犀利的很啊
分享到:
相关推荐
标题中的“我一个程序员的离奇经历”暗示了一个故事,可能是关于编程、软件开发或技术...这些情况都是对程序员可能遇到的离奇经历的想象,每一个都包含了大量的技术细节和解决问题的过程,体现了IT行业的复杂性和魅力。
处理器的离奇故障一例.pdf
小学数学数学神探离奇的敲诈案
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责处理客户端的交互和动态效果。在这个名为"Javascript常用效果.rar"的压缩包中,包含了一系列与JavaScript相关的实用效果,这些效果能够提升网站...
高中历史之历史百科一战时离奇的“圣诞休战”英德两军战地联欢素材
[精选]九鼎的三板游戏再现离奇交易神秘PE投资人浮出水面.pptx
在当今的信息时代,计算机硬件和软件的稳定运行对于我们的日常生活和工作至关重要。然而,有时即便是微小的硬件缺陷或软件更新也可能导致意外的问题。本文将详细探讨两个典型案例:CPU插座氧化故障导致的电脑无法...
8. 社区支持与服务:为了减轻认知症对个人和家庭的影响,日本正在发展社区支持服务,如监控系统、日间照料中心和专门的护理团队,旨在提供全方位的支持,确保患者的安全和生活质量。 总结:日本的认知症问题不仅是...
这些看似混乱的场景和离奇的角色,实际上蕴含着对社会现实的深刻反思。通过孩子们的视角,成人世界中的规则、权威和社会预期都被置于了一种新的审视之下。这样的叙述方式不仅让孩子们能够享受到阅读的乐趣,也让成年...
3. **量子论** - 普朗克的量子假说开启了量子力学的大门,揭示了微观粒子行为的离奇性质,如波粒二象性和不确定性原理。这为理解原子和分子级别的物理现象提供了关键。 4. **光的性质** - 牛顿的光的色散原理说明...
除了上述介绍的方法外,还可以探索更多与文本操作相关的JavaScript技巧和技术,例如: - **正则表达式的使用**:用于文本搜索和替换。 - **DOM操作**:通过JavaScript操纵文档对象模型(DOM)来修改页面内容。 - **...
文章目录一、被忽略的隐藏文件1、认识 swapfile2、处理建议二、未释放的已删除文件1、du 和 df 不一致2、处理建议三、挂载引发的悬案1、消失的空间2、处理建议2.1 解决方法2.2 测试验证2.3 给个建议 对于 Linux ...
- 对比与反差:将别里科夫与正常人的行为进行对比,突出他的离奇和不合时宜。 5. 作者从外貌、生活习惯、言行举止、思想观念等方面全面刻画了别里科夫的形象,展示了一个被各种“套子”束缚的典型人物。 6. 这句...
在这个世界里,她经历了各种离奇的冒险,遇到了许多奇特的角色,如会笑的柴郡猫、神奇的三月兔和帽匠,以及爱砍人头的红心王后。 阅读练习中涉及的知识点包括: 1. **故事情节**:爱丽丝帮助小兔子寻找扇子和手套...
柯南道尔,以他的睿智和逻辑推理闻名,面对这一离奇的科学问题,他并没有被表象迷惑。通过仔细的观察和推理,他发现,墓石的移动与季节变化有关,且这种移动并非超自然现象,而是自然界的物理现象所导致。柯南道尔的...
童话通过拟人化的手法和曲折离奇的情节,来吸引孩子们的注意力,并传递道德教育。在《皇帝的新装》中,安徒生创造了一系列鲜活的人物形象,包括自欺欺人的皇帝、虚伪的大臣、狡猾的骗子和勇敢说真话的小孩,通过这些...
在这个世界里,爱丽丝遇见了一个总是担心时间会丢失的疯帽商,一个总是咧嘴笑的三月兔,和一个总是在忙着编织东西的编织者。他们组成了一个不寻常的下午茶派对,而爱丽丝则意外地成为了派对的主角。在这个派对上,她...
《皇帝的新装》作为一篇流传甚广的经典童话,不仅以其曲折离奇的情节和生动的形象吸引着孩子们,更以其深刻的讽刺意义和思想内涵向读者传达出重要的社会信息。这篇童话由19世纪丹麦著名童话作家汉斯·克里斯蒂安·...
JS代码 JS网页内容模块选用 Photoshop 扩展动作 TAB带动画 隔行同色 层固定在右下角的离奇方法 超简单表格隔行换色+鼠标经过变色 打开关闭层JS 弹出菜单 顶部自动收缩滑动门广告代码 动画效果打开层 关闭层 固定位置...
正因为如此,我们需要培养敏锐的洞察力,去感知和理解他人的内心世界,而不仅仅是停留在表面的判断。 正如《老猫》所展现的那样,内在的力量是难以估量的。无论是在面对生活中的挑战,还是在与他人的交往中,一个人...