面试题

数组去重:

var result = [];

var obj = {};

for(var i =0;i<arr.length;i++){

  if( !obj[arr[i]] ){

    result.push( arr[i] );

    obj[arr[i]] = 1;

  }

  return result;

}

alert(aaa([ 5,2,7,5,1,7,5,4 ]))

昌泡排序:(思路是两个两个比较,比较小的放到前面,那么最后的那个就是最大,这样的进行下去)

function aaa(arr){

  for(var i =0;i<arr.length;i++){

    for(var j =0;j<arr.length-i;j++){

      toCon(j,j+1);

    }

    function toCon(prev,next){

      if(arr[prev] > arr[next] ){

        var tmp = '';

        if( arr[prev] > arr[next] ){

          tmp = arr[prev];

          arr[prev] = arr[next];

          arr[next] = tmp;

        }

      }

      return arr;

    }

  }

}

function aaa(n){console.log(n);if(n<=2){return 1;}return aaa(n-1)+aaa(n-2)};

aaa(8)  // 21

另一种方式:

function aaa(n){

var num1 =1;

var num2 = 2;

var num3 = 0;

for(var i = 0;i<n-2;i++){

  num3=num1+num2;

  num1 = num2;

  num2 = num3;

}

return num3

}

一种算法  斐波那契   数列    1,1,2,3,5,8,13,21

如果 n小于100就返回n,否则返回100

Math.min(n,100)

var arr = [n,100];

arr.sort(function(n1,n2){

  return n1-n2

})

return arr[0]

将两个数颠倒

var a = 5;

var b = 4;

a=[a,b];

b=a[0];

a=a[1];

例如如果n=5;不用for循环,返回[1,2,3,4,5]

function show(n){

var arr = [];

return (function(){

arr.unshift(n);

n--;

if(n!=0){

 arguments.callee();

}

return arr;

})()

}

变量提前

var a=10;

function aaa(){

alert(a); // undefined

var a = 20;

}

aaa();

正则:

var str = 'aaacbbbssseeeee';

var re = /(w)1+/g;

str.replace(re,function($0,$1){

  

})

给数字加分隔符2,333,455

(?=) 前向声明

(?!)反前向声明

function test( str ){

  var re = /(?=(?!) (d{3})+$)/g;

  return str.replace(re,',')

}

alert(test(str))

函数声明与函数表达式

unm();

if(1){

  function unm(){

    console.log(1)

  }

}else{

  function unm(){

    console.log(2)

  }

}

输出结果是2,因为函数声明前置

var obj = {

  eaa:1,

  eee:function(){console.log(this.eaa)}

};

obj.eee() //1;

另一个题

var obj = {

  eaa:1,

  eee:function(){console.log(this.eaa)}

};

(obj.eee,())

var num = 0;

function aaa(){

  console.log(num);

  var num;

}

aaa() // undefined  var num变量提升

题1:

var a=null;
undefined
var b;
undefined
a==b
true

题2

var a=1;
function aaa(a){a=2;console.log(a)}
aaa(a);
打印结果是2
a 在函数外输出a为1
1

题3

var num =2;
function foo(){return num;function num(){return num +'|'+this.num}}
foo()
ƒ num(){return num +'|'+this.num}
foo()()
"function num(){return num +'|'+this.num}|2"

题4

test();

function test() {console.log(2)}
var test = function() {console.log(1)};
2
test();
var test = function() {console.log(1)};

function test() {console.log(2)}
 2

原文地址:https://www.cnblogs.com/chaoyuehedy/p/8483236.html