面试题答案
一键面试定义区别
- 普通函数:使用
function
关键字定义,语法为function functionName(parameters) { /* 函数体 */ }
,也支持函数表达式const functionName = function(parameters) { /* 函数体 */ }
。 - 函数构造函数:使用
Function
构造函数来创建函数,语法为new Function('parameters', 'functionBody')
,例如const myFunction = new Function('a', 'b', 'return a + b;')
。这种方式不太常用,因为它的参数都是字符串形式,缺乏语法检查且可读性差。
使用区别
- 普通函数:通过函数名加括号调用,例如
functionName(arguments)
。 - 函数构造函数:可以像普通函数一样调用
myFunction(1, 2)
,也可以使用new
关键字创建对象实例(当希望函数作为构造函数使用时),例如const obj = new myFunction()
。当使用new
调用函数构造函数时,它会创建一个新的对象实例。
函数构造函数内部this
指向规则
- 作为普通函数调用:在非严格模式下,
this
指向全局对象(浏览器中是window
,Node.js中是global
);在严格模式下,this
的值为undefined
。 - 使用
new
关键字调用:this
指向新创建的对象实例。新创建的对象会被关联到构造函数的prototype
属性上,并且构造函数返回的值如果不是一个对象类型(如null
、undefined
、基本数据类型),则会返回新创建的对象实例。