首页 > 语言 > JavaScript > 正文

20个必会的JavaScript面试题(小结)

2024-05-06 15:37:13
字体:
来源:转载
供稿:网友

问题1:JavaScript 中 undefined 和 not defined 的区别

JavaScript 未声明变量直接使用会抛出异常:var name is not defined,如果没有处理异常,代码就停止运行了。 但是,使用typeof undeclared_variable并不会产生异常,会直接返回 undefined。

var x; // 声明 xconsole.log(x); //output: undefined console.log(typeof y); //output: undefined console.log(z); // 抛出异常: ReferenceError: z is not defined

问题2:下面的代码输出什么?

var y = 1;if (function f(){}) {  y += typeof f;}console.log(y);

正确的答案应该是 1undefined。

JavaScript中if语句求值其实使用eval函数,eval(function f(){}) 返回 function f(){} 也就是 true。

下面我们可以把代码改造下,变成其等效代码。

var k = 1;if (1) {  eval(function foo(){});  k += typeof foo;}console.log(k); 

上面的代码输出其实就是 1undefined。为什么那?我们查看下 eval() 说明文档即可获得答案

该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。

恰恰 function f(){} 语句的返回值是 undefined,所以一切都说通了。

注意上面代码和以下代码不同。

var k = 1;if (1) {  function foo(){};  k += typeof foo;}console.log(k); // output 1function

问题3:在JavaScript中创建一个真正的private方法有什么缺点?

每一个对象都会创建一个private方法的方法,这样很耗费内存

观察下面代码

var Employee = function (name, company, salary) {  this.name = name || "";      this.company = company || "";   this.salary = salary || 5000;   // Private method  var increaseSalary = function () {    this.salary = this.salary + 1000;  };  // Public method  this.dispalyIncreasedSalary = function() {    increaseSlary();    console.log(this.salary);  };};// Create Employee class objectvar emp1 = new Employee("John","Pluto",3000);// Create Employee class objectvar emp2 = new Employee("Merry","Pluto",2000);// Create Employee class objectvar emp3 = new Employee("Ren","Pluto",2500);

在这里 emp1,emp2,emp3都有一个increaseSalary私有方法的副本。

所以我们除非必要,非常不推荐使用私有方法。

问题4:JavaScript中什么是闭包?写出一个例子

老生常谈的问题了,闭包是在一个函数里声明了另外一个函数,并且这个函数访问了父函数作用域里的变量。

下面给出一个闭包例子,它访问了三个域的变量

    它自己作用域的变量 父函数作用域的变量 全局作用域的变量
var globalVar = "abc"; // Parent self invoking function (function outerFunction (outerArg) { // begin of scope outerFunction  // Variable declared in outerFunction function scope   var outerFuncVar = 'x';    // Closure self-invoking function   (function innerFunction (innerArg) { // begin of scope innerFunction    // variable declared in innerFunction function scope    var innerFuncVar = "y";     console.log(           "outerArg = " + outerArg + "n" +      "outerFuncVar = " + outerFuncVar + "n" +      "innerArg = " + innerArg + "n" +      "innerFuncVar = " + innerFuncVar + "n" +      "globalVar = " + globalVar);   }// end of scope innerFunction)(5); // Pass 5 as parameter }// end of scope outerFunction )(7); // Pass 7 as parameter innerFunction is closure that is defined inside outerFunc            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选