欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

51.函数与作用域& 立即函数表达式

程序员文章站 2022-07-11 11:53:20
...

注意:变量声明和函数声明都会提升,函数声明提升的优先级高于变量声明提升。
示例:

console.log(a);
var a=1;
function a(){};
51.函数与作用域& 立即函数表达式


如下代码的输出是?为什么

    sayName('world');
    sayAge(10);
    function sayName(name){
        console.log('hello ', name);  //hello world,因为sayName函数声明提升
    }
    var sayAge = function(age){
        console.log(age);  //抛出TypeError: sayAge is not a function,因为sayAge是函数表达式,使用前必须赋值,而声明放在了调用的后面,此时函数还不存在,所以会报错
    };

以下是错误做法

//函数调用
sayHi();
//函数声明
var sayHi = function(){
  console.log('Hi!');
};
会抛出错误:函数还不存在


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

  • 立即执行函数表达式:
    缩写IIFE,是一种利用javascript函数生成新作用域的编程方法,也叫自执行函数。
  • 作用:
    • 令函数中声明的变量绕过js的变量置顶声明规则
    • 避免新的变量被解释成全局变量或函数名占用全局变量名的情况
    • 在禁止访问函数內变量声明的情况下允许外部对函数的调用
  • 实现:因js里的()里不能包含语句,所以解析器会将()里的代码解析成function表达式并立即执行。
// 以下都能实现立即执行
(function(){ /* code */ }());
(function(){ /* code */ })();
// function前加一元运算符也可实现,advance-task2我有提到过
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();

写法

  • 第一种:


    51.函数与作用域& 立即函数表达式
    Paste_Image.png
  • 第二种:


    51.函数与作用域& 立即函数表达式
    Paste_Image.png

作用:

  • 进行作用域的隔离。因为在js中,没有块级作用域的概念,一个函数代表一个作用域。所以用来隔离作用域避免污染,或者截断作用域链,避免闭包造成引用变量无法释放。
51.函数与作用域& 立即函数表达式


作者:_Dot大师兄
链接:https://www.jianshu.com/p/ac38114b6e24
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:_Dot大师兄
链接:https://www.jianshu.com/p/ac38114b6e24
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。