关于function,new function 和 new Function

来源:互联网 发布:美图淘宝图片 编辑:程序博客网 时间:2024/06/04 19:32

在javascript中, function 是一个很特殊的存在,因为它本身便是一个对象。

1. 关于function 的基本用法:

function test(a,b){console.log(a+b)};test(1,2);3undefinedvar test=function(a,b){console.log(a+b)};test(1,2)3undefined

这就不用多说了,唯一的区别在于前者的function 有提升作用,不管放在文件的哪个地方,都可以使用,

可以这么写:test(1,2);function test(a,b){console.log(a+b)}; 但是后者就不行了。仅此而已。


2. 关于new function 和new Function.

谈这个之前,先 看看new在javascript中的意义和用处。new 主要用于对类进行实例化(虽然javascript中实际上没有类,姑且这么说吧。。),新建一个对象,例如:

var a=new object(); 但是请注意,new后面跟的实际上是该对象的构造函数,这一点对于理解关键字 new 至关重要!

那么 例子2 是什么意思呢?

例子2

var a=new function(a,b){ console.log("执行了!"); return a+b;};console.log(a.constructor(2,2));
执行了!
执行了!
4
大家可以看出来,匿名function执行了两次,证实了刚才所说的 new后面跟的是该对象的默认构造函数,在新建的时候执行了一次,在直接调用a.constructor的时候又执行了一次。而这段代码就是新建了对象a,而它的原始对象却是一个匿名对象,在这里只是提供了它的构造函数。a是一个对象,带一个构造函数而已。
记住:a不是后面那个function!不信?可以试一下:

console.log(typeof test);console.log(typeof a);
function
object

3. new Function

功能和 1 的基本功能差不多是一样的,只是写法不同:

var test=new Function('a','b','console.log(a+b)');test(2,5);
7

就是里面前面都是参数,后面是函数内容,具体执行语句。不过都要用字符串形式!

4. 好了,我们看看下面的例子:

function test(){return 'you\'re welcome!';};var v001=new function(){return 'you are welcome!';};alert(v001);var v002=new function(){return new String('you are welcome!';};alert(v002);

输出:[object][object]

you are welcome!

这是为什么? 这是因为在‘v002’中,第一个new 后面的构造函数如果返回一个引用类型的对象(new String创造的是一个object对象),会自动覆盖new创造匿名对象,然后赋值给v002。

原创粉丝点击