前端路上的各种问题-javascript—6

来源:互联网 发布:php编辑器安卓 编辑:程序博客网 时间:2024/05/16 11:40

1.function语句,new Function()或者函数直接量的比较:

     1)作用域方面,new Function具有全局作用域

     2)解析效率方面,new Function每次都需要重新编译对象,而function语句会提前编译,不会重复编译。这是new Fucntion具有全局作用域根本原因

    3)Function构造函数和函数直接量定义的函数不需要额外的变量,他们直接在表达式中参与运算,所以节省了资源,克服了function语句定义函数占用内存的弊端,这些函数运行     完成之后的内存就会被释放

2.arguments.length返回传入的参数的个数,arguments.callee.length返回形参的个数。

3.call和apply方法可以把一个函数转换为方法传递给某个对象,这种行为是临时的,函数最终并没有作为对象的方法而存在,当函数被调用的后,该对象的方法会自动被注销。如下面的例子:

 function f()
{
  alert("f invoked!");
}
f.call(Object);

//调用结束以后已经被注销,返回undefined!

alert(typeof Object.f);

下面一个call的例子:

function f()
{
  alert(this.x);
}
function c()
{
   alert(x);
}

f.call(c);//f函数中间的this指向c这个函数,但是这个函数本身没有x属性,所以弹出undefined,但是如果加上:c.x=12那么弹出12

4.当引用函数的时候,多个变量存储的是函数的相同入口指针,所以他们的值是相同的。相反,函数调用是执行该函数,并把返回的值传递给变量,所以基本类型的函数调用变量的值可能相同,但是引用类型的返回值是不同的!通过new实例化函数的结果也是引用类型的,所以也是不同的!

5.使用Function扩展类型

   Function.prototype.method=function(name,func)

     {

       if(!this.prototype[name])

         {

           this.prototype[name]=func;

            return this;

          }

   }

提取数字中间的整数部分:Number.method("integer",function(){return Math[this<0?'ceil':'floor'](this)});对于正数来说调用ceil方法,负数调用floor方法!

0 0
原创粉丝点击