浏览 1195 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-06-09
13.javascript中的函数对参数的处理十分灵活,可以传递任意数量的参数给一个function function sum() { var result = 0; for ( var i = 0; i < arguments.length; i++) { var current = arguments[i]; if (isNaN(current)) { throw new Error("not a number exception"); } else { result += current; } } return result; } alert(sum(1, 2, 3, 4)); alert(sum(5, 6)); alert(sum(1, 2, "ky")); 14.在执行一个函数时,函数的参数和局部变量会作为调用对象的属性进行存储。同时,解释器会为函数创建一个执行器上下文(context),与上下文对应的是作用域链,通常实现为一个链表,链表的每项都是一个对象。在全局作用域中,该链中有且只有一个对象,即全局对象。在一个最外层函数中,作用域链上会有两个对象,第一个是调用对象,第二个为全局对象。如果函数需要用到某个变量,则解释器会遍历作用域链。 作用域链随着嵌套函数的层次会变的很长,但是查找变量的过程依旧是遍历作用域链,自下而上查找,直到找出该值。如果遍历完作用域链仍然没有找到对应的属性,则返回undefined 15.Function.call()和Function.apply()用来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。apply的第二个参数为函数需要的参数组成的数组,而call则需要跟若干个参数,参数之间以逗号分隔 16.javascript的同一个数组中,可以有各种完全不同类型的元素 17.扩展数组和数组的遍历 Array.prototype.useless= function(){}; var arr = [ 1, 2, 3, 4, 5 ]; alert("length: " + arr.length);// 5 for ( var prop in arr) { alert(prop + ": " + arr[prop]);// 会输出useless } for ( var i = 0; i < arr.length; i++) { alert(arr[i]);// 不会输出useless } 从这个例子可以看出,除非必要,尽量不要对全局对象进行扩展,因为对全局对象的扩展会造成所有继承链上都带上“烙印”,有时候会造成一些非常难以发现的BUG 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |