IE678 使用命名函数 被坑

本人之前有个 习惯 喜欢给函数添加一些 静态属性 方法声明的 结果在IE678 使用命名函数 在函数内部引用函数名 居然不是同一个函数 导致 静态属性方法不能被正常访问 坑到没脾气

上测试代码

var o = {};

o.foo = function xxx(){
    console.log( xxx === o.foo);
    // false    true
    console.log( xxx === arguments.callee );
    // false    true
    console.log( xxx.prototype.constructor === o.foo.prototype.constructor)
    // false    true
    console.log( arguments.callee === o.foo );
    // true     true
};
o.foo()

//被坑道没脾气
时间: 2024-08-04 20:19:01

IE678 使用命名函数 被坑的相关文章

命名函数表达式的名字和函数声明的名字

1 var s = 0, 2 b = 0; 3 function A(s) { 4 A = function () { 5 console.log(s + b++); 6 }; 7 console.log(A); 8 console.log(s++); 9 } 10 A(1); 11 A(2); 12 console.log(delete A); 13 A(2); A作为全局对象的一个属性,值为一个函数的引用,当执行A函数时,将一个匿名函数传给A,此时会进行作用域链查找,在全局对象中找到了A,然

自己写的重命名函数(前缀+编号)

//重命名函数 // src: 原图像 // saveFolderPath: 将保持的文件夹路径 // prefix: 名称的前缀 // numName: 名称编号 bool RenameImage(IplImage* src, CString saveFolderPath, CString prefix, int& numName) { CString name, str; name = prefix;str.Format( _T("%d"), numName ); str.

深入理解JavaScript系列(2):揭秘命名函数表达式

前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你就会发现其实是不切实际的.当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看. 我们先开始看看,什么叫函数表达式,然后再说一

[Effective JavaScript 笔记] 第14条:当心命名函数表达式笨拙的作用域

js函数会根据上下文改变其含义. function double(x){return x*2;} 这是一个函数声明,也可以是一个命名函数表达式(named function expression),取决于它出现的地方. 声明一个函数,并绑定一个当前作用域的变量. 同一段函数代码也可以作为一个表达式. var f=function double(x){return x*2;} 根据ECMAScript规范,该函数绑定到变量f,而不是变量double.这里给函数表达式命名并不是必要的的,可以直接使用

被empty()这么简单的函数给坑了俩个小时

在排查一个比较复杂的功能时,怎么查都结果不对, 后来发现是因为empty()函数用错了!!! 我理所当然的以为 $list=array();if(empty(count($list))){ $course_rate = 0;} 这样写没什么问题.... 事实上这是错的...因为empty只能检查变量,不能检查函数执行的结果 empty — 检查一个变量是否为空 描述 bool empty ( mixed $var ) 如果 var 是非空或非零的值,则 empty() 返回 FALSE.换句话说

深入理解JavaScript系列(2):揭秘命名函数表达式(转)

前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简 单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你 就会发现其实是不切实际的.当然,如果你不关注调试,那就没什么可担心的了,否则,如果你想了解兼容性方面的东西的话,你还是应该继续往下看看. 我们先开始看看,什么叫函数表达式,然后再

命名函数

介绍 简而言之,命名化的函数表达式只对一个有用——在解析器和调试器中的描述性的函数名.所以,存在着在递归中使用函数名的可能,但是你讲看到这将是不可行的.以下你将看到你将面对的跨浏览器问题和一些解决技巧. 函数表达式VS函数声明 在ECMAScript中常见的创建函数的方式是函数声明和函数表达式.两者之间的区别很让人困惑,至少对我而言是这样的.在ECMA的说明中只是讲清楚了函数声明必须要有一个标识符(如果你喜欢,可以叫做函数名),然而函数表达式可以省略函数名: 函数声明 :function Ide

<深入理解JavaScript>学习笔记(2)_揭秘命名函数表达式

写在前面的话 注:本文是拜读了 深入理解JavaScript 之后深有感悟,故做次笔记方便之后查看. 感觉这章的内容有点深奥....略难懂啊. 先坐下笔记,加深一下印象吧. 我主要记一下自己感觉有用的东西...哈哈 函数表达式和函数声明 在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符: 函数声明: funct

深入理解javascript:揭秘命名函数表达式

这是一篇转自汤姆大叔的文章:http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简单的说,命名函数表达式只有一个用户,那就是在Debug或者Profiler分析的时候来描述函数的名称,也可以使用函数名实现递归,但很快你 就会发现其实是不切实际的.当然