饥人谷技术博客

前端面试题之JavaScript(三)

2017-08-29  本文已影响0人  庄海鑫

1.立即执行函数表达式是什么?有什么作用

var a=2;
(function foo(){
    var a=3;
    console.log(a); //3
})();
console.log(a); //2

由于函数被包含在一对()括号内部,因此成为了一个表达式,通过在末尾加上另外一个()可以立即执行这个函数,比如(function foo(){..})()。第一个()将函数变成表达式,第二个()执行了这个函数。
作用


2. 求n!,用递归来实现

function factorial(n){
  if(n==1){
  return 1;
}
  return n*factorial(n-1);
}
factorial(5);

3.以下代码输出什么?

image.png

4.写一个函数,返回参数的平方和?

  <script>
    function sumOfSquares() {
      var sum = 0;
      for (var i = 0; i < arguments.length; i++){
        sum += arguments[i] ** 2;
    }
    return sum;
}
    var result = sumOfSquares(2, 3, 4)
    var result2 = sumOfSquares(1, 3)
    console.log(result)  //29
    console.log(result2)  //10
  </script>

5.如下代码的输出?为什么

var a;
console.log(a);
 a= 1;
console.log(b);

6. 如下代码的输出?为什么

    function sayName(name){
        console.log('hello ', name);
    }
    var sayAge;
    sayName('world');
    sayAge(10);
        sayAge= function(age){
        console.log(age);
    };

7.如下代码输出什么? 为什么

var x=10
function foo() {
  console.log(x)
}
function bar(){
  var x = 30
  foo()
}
bar()

8.如下代码输出什么? 为什么

image.png

等价于

var x=10
function bar() {
 var x=30
function foo(){
   console.log(x)
}
  foo()
}
bar()

9.如下代码输出什么? 为什么


10.如下代码输出什么? 为什么

image.png

11.如下代码输出什么? 为什么

var a = 1
function fn1(){

  function fn3(){
    function fn2(){
      console.log(a)
    }
     var a = 4
    fn2()
   
  }
  var a = 2
  return fn3
}
var fn = fn1()
fn() //输出多少

12.如下代码输出什么? 为什么



13.如下代码输出什么? 为什么

image.png
var a = 1
var c = { name: 'jirengu', age: 2 }

function f1(n){
 // n=a
 //n=c.age 
  ++n
}
function f2(obj){
  ++obj.age
}

f1(a) 
f2(c) 
f1(c.age) 
console.log(a) 
console.log(c) 

基本类型引用类型传参都是值传递,相当于赋值,前者和后者没有任何关系,但是引用类型赋值赋的是引用即内存地址,所以还是会访问同一对象,所以当引用改变属性的时候,会相应改变。如果函数当中给对象重新赋值,那内作用域的对象和外作用域对象就毫无关系了。
参考:http://www.jianshu.com/p/0b9216bd05a7 基本类型传参,引用类型传参。


14.对象浅拷贝函数

  <script>
    function shallowCopy(obj) {
      var newObj = {};
      for (var i in obj) {
        if (obj.hasOwnProperty(i)) {
          newObj[i] = obj[i];
        }

      }

      return newObj;
    }
    // var obj = {
    //   name: "zhx", age: "17", arr: [1, 3, 5, 6, 7]
    // };
    var obj={
      name:'zhx',
      age:'19',
      infomation:{
        height:'100',
        weight:'40'
      }
    }

    var obj1=shallowCopy(obj);
    obj.infomation.height=40;
    console.log(obj);
    console.log(obj1);
  </script>

15. 对象深拷贝函数

  <script>
    function deepCopy(obj){
      var newObj={};
      for(var key in obj){
        if(typeof oldObj[key] === 'object') {
                newObj[key] = deepCopy(oldObj[key]);
            }else{
                newObj[key] = oldObj[key];
            }
      }
      return newObj;
    }
    var obj={
      name:'zhx',
      age:'19',
      infomation:{
        height:'100',
        weight:'40'
      }
    }

    var obj1=shallowCopy(obj);
    obj.infomation.height=40;
    console.log(obj);
    console.log(obj1);
  </script>
上一篇 下一篇

猜你喜欢

热点阅读