问题1:JavaScript 中 JavaScript 未声明变量直接使用会抛出异常: var x; // 声明 xconsole.log(x); //output: undefinedconsole.log(typeof y); //output: undefinedconsole.log(z); // 抛出异常: ReferenceError: z is not defined
问题2:下面的代码输出什么?var y = 1;if (function f(){}) {
y = typeof f;
}console.log(y);
正确的答案应该是 JavaScript中if语句求值其实使用 下面我们可以把代码改造下,变成其等效代码。 var k = 1;if (1) { eval(function foo(){});
k = typeof foo;
}console.log(k);
上面的代码输出其实就是
恰恰 注意上面代码和以下代码不同。 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
输出很简单: outerArg = 7outerFuncVar = xinnerArg = 5innerFuncVar = yglobalVar = abc
问题5:写一个mul函数,使用方法如下。console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48
答案直接给出: function mul (x) { return function (y) { // anonymous function
return function (z) { // anonymous function
return x * y * z;
};
};
}
简单说明下: mul 返回一个匿名函数,运行这个匿名函数又返回一个匿名函数,最里面的匿名函数可以访问 x,y,z 进而算出乘积返回即可。 对于JavaScript中的函数一般可以考察如下知识点:
问题6:JavaScript怎么清空数组?如 var arrayList = ['a','b','c','d','e','f'];
怎么清空 方法1arrayList = [];
直接改变arrayList所指向的对象,原对象并不改变。 方法2arrayList.length = 0; 这种方法通过设置length=0 使原数组清除元素。 方法3arrayList.splice(0, arrayList.length);
和方法2相似 问题7:怎么判断一个object是否是数组(array)?方法1使用 Object.prototype.toString 来判断是否是数组 function isArray(obj){ return Object.prototype.toString.call( obj ) === '[object Array]';
}
这里使用call来使 toString 中 this 指向 obj。进而完成判断 方法二使用 原型链 来完成判断 function isArray(obj){ return obj.__proto__ === Array.prototype;
}
基本思想是利用 实例如果是某个构造函数构造出来的那么 它的 方法3利用JQuery function isArray(obj){ return $.isArray(obj)
}
JQuery isArray 的实现其实就是方法1 问题8:下面代码输出什么?var output = (function(x){ delete x; return x;
})(0);console.log(output);
输出是 问题9:下面代码输出什么?var x = 1;var output = (function(){ delete x; return x;
})();console.log(output);
输出是 问题10:下面代码输出什么?var x = { foo : 1};var output = (function(){ delete x.foo; return x.foo;
})();console.log(output);
输出是 大数据招生火热进行中 有想报名进行免费试听的同学可以点击原文连接或加小骨头QQ(3459600846)进行了解哦! 大有作为 数倍薪资 据为己有 如果你也觉得我们不错,可直接搜索公众号进行关注,查看历史消息即可。 如果你觉得文章不错,也可点击右上角的“...”分享到朋友圈大家需要正能量。 http://www.codeceo.com/article/20-javascript-questions.html |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|