美文网首页
js之函数

js之函数

作者: 车万里 | 来源:发表于2016-10-31 00:45 被阅读0次

1.函数声明和函数表达式有什么区别?

函数声明:

function functionName(){
    statement;
}

使用function关键字声明一个函数
函数表达式:

var printName = function(){
    console.log('Byron');
};

声明一个变量赋值其为函数

2.什么是变量的声明前置?什么是函数的声明前置

变量的声明前置:先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部
函数的声明前置:和变量的声明会前置一样,函数声明同样会前置,如果我们使用函数表达式那么规则和变量一样,如果我们使用函数声明的方式,那么即使函数写在最后也可以在前面语句调用。

3.arguments 是什么

arguments可以获取到该函数的所有传入参数

function printPersonInfo(name, age, sex){
    console.log(name);
    console.log(age);
    console.log(sex);
    console.log(arguments);
}

4.函数的重载怎样实现

在JavaScript中没有函数重载的概念,函数通过名字确定唯一性,参数不同也被认为是相同的函数,后面的覆盖前面的

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

//方法1
( function() {
}() );
//方法2
( function() {
} )();

作用:创建一个独立的作用域,外面访问不到变量,避免污染

6、什么是函数的作用域链

任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
1.全局作用域
 在代码中任何地方都能访问到的对象拥有全局作用域
2.局部作用域
和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域
作用域链
当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain,不简称sc)来保证对执行环境有权访问的变量和函数的有序访问。作用域第一个对象始终是当前执行代码所在环境的变量对象,如果当前环境没有,就依次访问上一级变量。

代码

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('男');
name:hunger;
age:28;
sex:男;
['hunger',28,'男']
name:valley;

name:hunger;
age:28;
sex:undefined;
['hunger',28]
name:valley;

name:男;
age:undefined;
sex:undefined;
['男']
name:valley;

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

function sumOfSquares(){
   var sum=0;
    for(var i=0;i<arguments.length;i++){
      sum +=arguments[i]*arguments[i];
    }
console.log(sum);
 } 

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

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

console.log(a); //undefined;
var a = 1;
 console.log(b);//报错

声明(var)会被前置,所以a是undefined,而b未被声明,所以报错。

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

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

因为声明和定义函数会前置,可转换为

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

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

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

可转化为

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

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

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

3

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

可转化为

function fn(fn2){ 
  var fn2//声明提前
  function fn2(){
     console.log('fnnn2');
  }//函数定义提前
  console.log(fn2); //打印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; 
function fn(fn){ 
    console.log(fn);
 }
fn = 1//fn变成了1
 console.log(fn(fn));//fn 不是函数,报错

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

 //作用域 
console.log(j);
 console.log(i);
 for(var i=0; i<10; i++){ 
    var j = 100;
 }
 console.log(i);
 console.log(j);
undefined;
undefined;//i和j都未定义
10;//for循环的声明都是全局变量
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;
    }
}
undefined;
100;
10;

等同于

var i;
var fn;
function fn(){
    var i;//声明前置
     function fn2(){
       i = 100;
      }//函数定义前置
    console.log(i); //i未定义
     i = 99;
    fn2();//i变成100
    console.log(i);//100
   
    }
 fn(); //执行函数
 i = 10;//i变成10
 fn = 20;
console.log(i);10

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

var say = 0;
(function say(n){
  console.log(n); 
  if(n<3) 
  return; 
  say(n-1); 
  }( 10 ));
   console.log(say);
10
9
8
7
6
5
4
3
2
0

代码等同于

var say;
(function say(n){
  console.log(n); 
  if(n<3) 
  return; 
  say(n-1); 
  }( 10 ));//函数立即执行,n初始值为10,循环直到n等于2停止
say = 0;
 console.log(say);//0

相关文章

  • JS之函数

    函数 每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法。函数没有重载,函数可以有...

  • JS之函数

    问答题 1. 函数声明和函数表达式有什么区别 1.函数声明必须有标识符,也就是常说的函数名;函数表达式可以省略函数...

  • js之is()函数

    is方法用于查看选择的元素是否匹配选择器语法:$(selector).is(selectorElement,fun...

  • js之函数

    1.函数声明和函数表达式有什么区别? 函数声明: 使用function关键字声明一个函数函数表达式: 声明一个变量...

  • JS之函数

    函数 指可以执行代码的对象,和数组一样有不一致性。 三种函数声明方式 function f() { } var ...

  • JavaScript 05 函数

    js函数的概念和作用,js函数的定义,js函数的调用,js事件驱动的概念,js函数的实参和形参,js的作用域,js...

  • js 深入

    * js语法* js的动态函数和匿名函数* js动态函数Functionnew Function();* 匿名函数...

  • JS之Function类型理解

    JS之Function类型理解 简述 函数实际上也是对象,每个函数都是Function对象的实例,因此,函数名是一...

  • 2018-12-01

    js中括号操作属性 js函数 js换肤 变量和函数预解析 匿名函数 函数传参 函数return关键字 流程控制语句...

  • JS面试之对象(2)

    序列文章 JS面试之函数(1)JS面试之数组的几个不low操作(3) 前言 一篇彻底搞懂对象,从此不用担心没对象啦...

网友评论

      本文标题:js之函数

      本文链接:https://www.haomeiwen.com/subject/lciuuttx.html