MST

星途 面试题库

面试题:JavaScript中函数构造函数的基本特性

请简述JavaScript函数构造函数与普通函数在定义和使用上的区别,并且说明函数构造函数内部 `this` 的指向规则。
20.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

定义区别

  1. 普通函数:使用function关键字定义,语法为function functionName(parameters) { /* 函数体 */ } ,也支持函数表达式const functionName = function(parameters) { /* 函数体 */ }
  2. 函数构造函数:使用Function构造函数来创建函数,语法为new Function('parameters', 'functionBody') ,例如const myFunction = new Function('a', 'b', 'return a + b;') 。这种方式不太常用,因为它的参数都是字符串形式,缺乏语法检查且可读性差。

使用区别

  1. 普通函数:通过函数名加括号调用,例如functionName(arguments)
  2. 函数构造函数:可以像普通函数一样调用myFunction(1, 2) ,也可以使用new关键字创建对象实例(当希望函数作为构造函数使用时),例如const obj = new myFunction() 。当使用new调用函数构造函数时,它会创建一个新的对象实例。

函数构造函数内部this指向规则

  1. 作为普通函数调用:在非严格模式下,this指向全局对象(浏览器中是window,Node.js中是global);在严格模式下,this的值为undefined
  2. 使用new关键字调用this指向新创建的对象实例。新创建的对象会被关联到构造函数的prototype属性上,并且构造函数返回的值如果不是一个对象类型(如nullundefined、基本数据类型),则会返回新创建的对象实例。