饥人谷技术博客

函数

2016-08-17  本文已影响15人  Nicklzy

函数声明和函数表达式有什么区别 (*)

由此可以看出,即使函数shengMing是在后面声明的,但是也可以在前面叼用。而函数表达式则不可以。说明对于函数声明,函数名称和函数体均提前声明了,可以在声明之前调用它;但对于函数表达式,只有函数变量声明提前了,但是函数的初始化代码仍然在原来的位置。

什么是变量的声明前置?什么是函数的声明前置 (**

arguments 是什么 (*)

函数的重载怎样实现 (**

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


以上两种即为立即执行函数表达式。

http://weizhifeng.net/immediately-invoked-function-expression.html

什么是函数的作用域链 (****

1.以下代码输出什么? (难度**

function getInfo(name, age, sex){
    console.log('name:',name);
    console.log('age:', age);
    console.log('sex:', sex);
    console.log(arguments);
    arguments[0] = 'valley';
    console.log('name', name);
}

getInfo('hunger', 28, '男');
getInfo('hunger', 28);
getInfo('男');

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

function sumOfSquares(){
 }
 sumOfSquares(2,3,4);   // 29
 sumOfSquares(1,3);   // 10

代码如下

function sumOfSquares(){
   for(i=0,s=0;i<arguments.length;i++){ 
     s=s+arguments[i]*arguments[i];
   }                  //之前设置了在for语句内部设置了var s=0,导致只输出最后一个参数的平方。
   console.log(s);
 };

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

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

考察了变量提升。如下代码相当于

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

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

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

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

function fn(){}
var fn = 3;
console.log(fn);

相当于

var fn;
function fn(){}
fn = 3;
console.log(fn);

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

function fn(fn2){
   console.log(fn2);
   var fn2 = 3;
   console.log(fn2);
   console.log(fn);
   function fn2(){
        console.log('fnnn2');
    }
 }
fn(10);

以上代码相当于

function fn(fn2){
   var fn2;
   function fn2(){
        console.log('fnnn2');
    }
   console.log(fn2);//按顺序来,此时输出的为函数
   fn2 = 3;
   console.log(fn2);//3
   console.log(fn);//此时输出的为fn函数
 }
fn(10);

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

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

此代码相当于

var fn;//此时fn为变量
function fn(fn){
     console.log(fn);
}//此时fn为函数
fn = 1;此时fn为1
console.log(fn(fn)); //相当于console.log(1(1));

1当然不是函数啦,结果必然报错。
Uncaught TypeError: fn is not a function
8.如下代码的输出?为什么

//作用域
console.log(j); 
console.log(i); 
for(var i=0; i<10; i++){
    var j = 100;
}
console.log(i); 
console.log(j);

此代码相当于

var i;
var j;
console.log(j); //定义了未赋值,undefined
console.log(i); //定义了未赋值,undefined
for(i=0; i<10; i++){
    j = 100;
}
console.log(i); //10
console.log(j);//100

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

fn();
var i = 10;
var fn = 20;
console.log(i);
function fn(){
    console.log(i); 
    var i = 99;
    fn2();  
    console.log(i); 
    function fn2(){
        i = 100;
    }
}

此代码相当于

var i;
var fn;
function fn(){
    var i;
    function fn2(){
        i = 100;
    }
    console.log(i); //定义了变量,未执行函数,undefined
    var i = 99;//此处为局部变量i=99;
    fn2();  //调用函数,i=100
    console.log(i); //i=100;
}
fn();
i = 10;
fn = 20;
console.log(i);//i=10

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

var say = 0;
(function say(n){
    console.log(n);
    if(n<3) return;
    say(n-1);
}( 10 ));//此为自执行函数,参数为10,执行到2时结束函数。
console.log(say);//自执行函数相当于闭包。不影响全局。由上面定义的可知,var say =0,输出为0.
上一篇下一篇

猜你喜欢

热点阅读