本簡(jiǎn)書(shū)中所選的關(guān)于前端的基礎(chǔ)題目均來(lái)自微信公眾號(hào)《前端大全》和《前端JavaScript》
直接上代碼desu
/***************************經(jīng)典面試題*******************************/
//判斷引用類(lèi)型
/*var obj={},arr=[],fun=function(){};
console.log(Object.prototype.toString.call(obj));
console.log(Object.prototype.toString.call(arr));
console.log(Object.prototype.toString.call(fun));
console.log(typeof asss)
//
var myObject={
foo:'bar',
func:function(){
var self=this;
(function(test){
console.log(test.foo);
console.log(self.foo);
}(self))
}
}
myObject.func();
////IIFE
//循環(huán)中定時(shí)輸出數(shù)據(jù)項(xiàng)
for(var i=0;i<5;i++){
(function(i){
setTimeout(function(){
console.log(i)
},1000)
}(i))
}
//jQuery/Node插件和模塊開(kāi)發(fā)中避免變量污染
(function($){
}(jQuery))
//JS解析器自動(dòng)填充分號(hào)機(jī)制
function foo1(){
return {
bar:1
};
}
function foo2(){
return
{
bar:1
};
}//返回undefined
//對(duì)于return break continue 若后面緊接換行檀夹,解析器會(huì)自動(dòng)在后面填充分號(hào)
(function(){
console.log(1);
setTimeout(function(){console.log(2)},1000);
setTimeout(function(){console.log(3),0});
console.log(4);
}())//1 4 3 2
//判斷一個(gè)字符串是不是回文字符竄
function isPalindrome(str) {
return (str == str.split('').reverse().join(''));
}
alert(isPalindrome('上海自來(lái)水來(lái)自海上'))
//array.reverse()不創(chuàng)建新數(shù)組筋粗,改變?cè)瓟?shù)組
var arr1 = "john".split('');
var arr2 = arr1.reverse();
var arr3 = "jones".split('');
arr2.push(arr3);//此處推進(jìn)了一個(gè)數(shù)組作為arr2的一個(gè)元素
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
//空數(shù)組與空對(duì)象的布爾類(lèi)型轉(zhuǎn)換
console.log([]==false,Number([]));//true
console.log({}==false,Number({}));//false
console.log(Boolean([]));//true
console.log(Boolean({}));//true
console.log(1==true,'a'==true,2==true);//true,false,false
//空數(shù)組炸渡,空對(duì)象對(duì)應(yīng)的布爾值類(lèi)型均為true娜亿,因此在if從句判斷中,空數(shù)組空對(duì)象均可以視為true蚌堵;
//與布爾值進(jìn)行比較時(shí)买决,符號(hào)兩邊均轉(zhuǎn)化為數(shù)字,即調(diào)用Number()函數(shù)吼畏,(注意不是調(diào)用valueOf()函數(shù))
//為對(duì)象設(shè)置屬性時(shí)督赤,JavaScript會(huì)隱式調(diào)用toString()函數(shù)
var o={};
var b={key:'b'};
var c={key:'c'};
o[b]=123;//隱式調(diào)用后b轉(zhuǎn)化為[object Object],下同泻蚊,故與下式實(shí)為同一屬性
o[c]=456;
console.log(o[b]);//456
////堆棧溢出及優(yōu)化
//溢出
function isEven(num){
if(num == 0){return true;}
if(num == 1){return false;}
return isEven(Math.abs(num)-2);
}
console.log(isEven(100000))
//閉包函數(shù)優(yōu)化
function isEven(num){
function isEvenInner(num){
if(num === 0){return true;}
if(num === 1){return false;}
return function(){
return isEvenInner(Math.abs(num)-2);
}
}
function simplify(func,num){
var value=func(num);
while(typeof value == 'function'){
value=value();
}
return value;
}
return simplify.bind(null,isEvenInner)(num)
}
console.log(isEven(100000));//這種方法num太大也不可以
*/
//調(diào)用定時(shí)器
//溢出
/*function factorial(n){
if(n === 1) {return 1;}
return n*factorial(n-1);
}
console.log(factorial(10000));
//尾調(diào)用優(yōu)化
function tailFactorial(n, total) {
if (n === 1) return total;
return tailFactorial(n - 1, n * total);
}
console.log(tailFactorial(5,1))
function factorial(n) {
return tailFactorial(n, 1);
}
console.log(factorial(10000))
//currying
function currying(fn,n){//柯里化要綁定的參數(shù)
return function(m){//柯里化的函數(shù)躲舌,m對(duì)應(yīng)輸入的唯一一個(gè)參數(shù)
return fn.call(this,m,n)
}//柯里化
}
var factorial_1=currying(tailFactorial,1);
console.log(factorial_1(5));*/
/*****************************關(guān)于作用域和VO、AO的幾題*****************************/
/*function test(){
console.log(foo);//function hello
console.log(bar);//undefined
var foo='Hello';
console.log(foo);//Hello
var bar=function(){
return 'world';
}
function foo(){
return 'hello'
}
}
test();
//變量編譯與執(zhí)行
var str='a';
function test(){
console.log(str);
var str='b';
console.log(str);
}
test();//試下改為 srt='b'?
//連續(xù)賦值對(duì)作用域的影響
(function(){
var user=author='a';
}());
console.log(author);
console.log(user);
//連續(xù)賦值中只有user是通過(guò)var變量聲明的性雄,聲明在了私有作用域中没卸,所以author在全局作用域中
//函數(shù)間的變量訪問(wèn)關(guān)系
var user='a';
function first(){
console.log(user)
}
function second(){
var user='b';
first();
}
second();
//形參與作用域
var user='a';
function changeUser(user){
user='b' //形參不能被外部作用域訪問(wèn),等價(jià)于var user=user; user='b';
}
changeUser(user);
console.log(user);
//VO建立過(guò)程1
function test(){
function a(){
return 1
}
alert(a());
function a(){
return 2
}
alert(a())
}
test()
//VO建立過(guò)程2
function test(){
var a=1;
alert(a);
var a=2;
alert(a);
}
test()
//形參與作用域2
var user='a';
function test(user){
console.log(user); //等價(jià)于var user=user;console.log(user);var user='b';console.log(user);
var user='b';
console.log(user)
}
test(user);
//函數(shù)名與作用域
var user='a';
function test(){
user='b';
return;
function user(){
console.log('c')
}
}
test();
console.log(user);
//test函數(shù)執(zhí)行順序:user先被聲明為局部函數(shù)秒旋,之后修改為'b'约计,但仍為局部變量,之后返回滩褥,故全局變量中user不變病蛉。*/