2 qq 35732147 qq_35732147 于 2018.02.26 16:09 提问

有关JavaScript定义函数 5C

JavaScript中的函数是Function的对象,那么函数对象是什么时候创建的呢?比如我声明了一个对象,是不是就创建了一个函数对象?

还有,为什么不推荐用Function构造函数模式定义函数呢?

6个回答

showbo
showbo   Ds   Rxr 2018.02.26 16:39

使用Function构造器生成的Function对象是在函数创建时解析的。这比你使用函数声明或者函数表达式(function)并在你的代码中调用更为**低效**,因为使用后者创建的函数是跟其他代码一起解析的。
详细参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function

而且如果你的函数代码体很复杂,你用Function就很麻烦了,特别涉及到dom的组装,转义就要搞死人

humanww
humanww   2018.02.26 16:36

1,除了函数对象,还有很多内部对象
所有typeof返回 “function”的对象都是函数对象

2,因为每构造一个对象就会生成一个alertUrl方法,这样太浪费资源空间,所以把alertUrl这个方法写在全局以节省空间,但这样写就违背了面向对象编程的初衷,下面的原型模式就更好一些。https://www.cnblogs.com/yonglin/p/6262896.html

cubealex
cubealex   2018.02.26 16:38

1,除了函数对象,还有很多内部对象
所有typeof返回 “function”的对象都是函数对象

2,因为每构造一个对象就会生成一个alertUrl方法,这样太浪费资源空间,所以把alertUrl这个方法写在全局以节省空间,但这样写就违背了面向对象编程的初衷,下面的原型模式就更好一些。https://www.cnblogs.com/yonglin/p/6262896.html

qq_30325409
qq_30325409   2018.02.26 16:36

js new对象发生了事情:
创建空对象
把this指向空对象
赋值
方法中的this指代 new 出来的对象。

Function构造函数模式定义函数,从技术角度讲,这是一个函数表达式。一般不推荐用这种方法定义函数,因为这种语法会导致解析两次代码(第一次是解析常规ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。

Function()构造函数每次执行时都会解析函数主体,并创建一个新的函数对象,所以当在一个循环或频繁执行的函数中调用Function()构造函数效率是非常低的。而函数字面量却不是每次遇到都会重新编译的,用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。

qq_38358086
qq_38358086   2018.02.26 17:57

除了函数对象,还有很多内部对象
所有typeof返回 “function”的对象都是函数对象

xhh_1817
xhh_1817   2018.02.27 08:34

函数一般配合事件使用吧,

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!