JS疑问
疑问一:变量声明提升代码片段一
代码片段二
在IIF函数(立即执行函数)的执行上下文中,由于变量声明的提升,沿着作用域链开始逐级向上回溯搜素时,在IIF函数内找到了a变量,上述代码相当于:
疑问二:函数声明和函数表达式代码片段一
由于函数声明提升总是优先于变量声明提升,因此即使将上述函数表达式和函数声明对调,输出的结果仍不变。上述代码相当于:
疑问三:带标识符的函数表达式在segmentfault看到的一个问题,从这个问题又了解到了“词法记录器”:
解读:这段代码关乎声明提升(Hoisting),c函数内部的变量没有使用var声明,所以本来b和c为function c() {},被分别覆盖为2和3了。 在代码片段一的基础上修改为以下:
解读:
对于函数表达式的第一种写法,var bar = function foo() {};这个标识符标量只在函数的作用域内有效,并且不会被覆盖,在函数外围无效(在IE8及IE8以下浏览器却是可见的)。所以代码片段三,C输出为function c() {};而不是3 在代码片段二的基础上修改为以下:
疑问四:js高级程序(闭包与变量)代码
原书上的代码似乎要改成这样,result数组里才会存放每一个i的值。如若像书本那样写,result的值将会是:
疑问五:事件委托机制
代码示例:
疑问六:call函数Chrome36控制台下执行下列代码,为何输出this的时候,不是基本类型值String?
疑问七:Array.prototype.slice.call/apply()更多时候,该方法一般运用到array-like类数组上,因为这种数据没有数组所特有的属性和方法。类似:函数内部的arguments对象,它类似于数组,没有数组所特有的属性和方法,除了length。 注意:在MDN中,……不应在 arguments 对象上使用 slice 方法,这会阻碍 JavaScript 引擎的优化 (比如 V8 引擎)。作为替代,应通过遍历arguments对象的方式来构建一个新的数组。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |