美文网首页
JS -函数及其作用域

JS -函数及其作用域

作者: 饥人谷_阿靖 | 来源:发表于2017-01-03 04:43 被阅读42次

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

 function functionName(){};  //函数声明:使用function关键字声明一个函数
 var functionName = function(){};   //函数表达式
区别:
函数声明必须有函数名,函数调用可以放在任何位置(函数的声明前  置)。
函数表达式的函数名可以省略(但不能被外部直接引用),函数调用只有在函数表达式声明后才能使用。

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

如果存在变量声明和函数声明,那么它们都会被提到外部作用域的开头,其中变量声明不被赋值,函数声明不会执行。
如果变量声明和函数声明是同名的,那么函数的优先级更高,所以变量会被函数覆盖掉。如果变量声明的同时被赋值那么变量优先级高于函数。

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

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

3、arguments 是什么

arguments是一个类数组对象, 存储了该函数的在执行时的所有传入参数, 只有length属性, 可以用arguments访问参数, 检测函数的参数个数, 也可用于模拟函数重载.

4、函数的重载怎样实现

js中并没有函数重载的概念,如果声明了两个同名函数,结果是后面的函数覆盖了前面的函数。
function sum(a,b){
     var sum=0;
     sum=a+b;
     return sum;

}

 function sum(a,b,c){
     var sum=0;
     sum=a+b+c;
     return sum;
 }
console.log(sum(1,2));//NaN
console.log(sum(1,2,3));//6

实现函数重载效果,可以通过arguments对象实现:
function sum(){
var sum =0;
for(var i=0;i<arguments.length;i++){
    sum =sum+arguments[i];
}
return sum;
}
console.log(sum(1,2));  //3
console.log(sum(1,2,3));  //6

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

立即执行函数表达式,两种形式:
(function (){})();
(function (){}());
作用:
1、模拟块作用域, JS没有块作用域(block),只有函数作用域,在同时调用多个库的情况下,很容易造成对象或者变量的覆盖, 使用立即执行函数可以创建独立的作用域, 不互相影响。
2、解决闭包冲突
3、模拟单例

var a=1;
(function (){ console.log(a); })(); //立即执行函数表达式

var b=function () //函数表达式
 { console.log(a); }
 ();

 function c() //函数声明
 { console.log(a); }
 c();

 function fn() {  
      var x = 1;  
      if (x) {  
    (function () {  
        var x = 2;  
        console.log(x); //x is 2
    }());  
}  
console.log(x); //x is still 1

}

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

  在JS中,变量的作用域有全局作用域和局部作用域两种:
  在代码中任何地方都能访问到的对象拥有全局作用域;
  局部作用域一般只在固定的代码片段内可访问, 最常见的例如函数内部。

  在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。   函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。

相关文章

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • JS -函数及其作用域

    1、函数声明和函数表达式有什么区别 2、什么是变量的声明前置?什么是函数的声明前置 3、arguments 是什么...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

  • 你不知道的JS-上卷

    作用域整体理解:JS作用域分为函数作用域,全局作用域,with和try catch形成的块级作用域。 JS引擎在编...

  • js作用域

    词法作用域 -js采用的是词法作用域,函数的作用域基于函数创建的位置。

  • 闭包

    js的作用域分为全局作用域,和函数作用域, 内部作用域可以访问外部作用域的函数参数,外部不能访问内部函数的变量和参...

  • 作用域链&闭包&函数相关

    作用域链 在JS中函数可以创建作用域; 函数中又可以创建函数(可以开辟新的作用域); 函数内部的作用域可以访问外部...

  • js 闭包

    一、js 作用域 讲闭包首先就要理解 js 的作用域。再 ES5 中,js 有两种作用域,全局作用域和函数作用域(...

  • js 的变量提升和函数提升

    1. 深入理解 js 的变量提升和函数提升 先了解:js没有块级作用域,只有全局作用域,和函数作用域 相同的函数名...

  • 作用域

    作用域:定义了变量或函数的可访问范围,JS只有两种作用域:全局作用域和函数内部作用域

网友评论

      本文标题:JS -函数及其作用域

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