zoukankan      html  css  js  c++  java
  • 函数,匿名函数新认知(与预解释、作用域的关系)

    大家都应该知道j函数的2中写法:

    1 //函数声明
    2 function fun () {
    3     return true;
    4 }
    5 //匿名函数 or 函数表达式 or 函数变量化
    6 var var2fun = function () {
    7 return false;
    8 }

    可以这样(函数变量化)大概是因为:js是弱类型语言,定义变量的时候只有一个var,为变量赋值时会自动判断类型并进行转换。     (提出一个问题!javascript在 var 时候做了什么!)

    这里我们主要关注一下他们的区别吧!

    大家都知道javascript是解释性语言。以语句块和语句行的形式边读取边执行,虽然没有编译整个过程,但会有预解析(这个过程会在作用域内,把函数、变量前置)

     预解释前置    (输出代码为追加的测试代码)

    var var2fun ;    //预解析后  变量前置   具体的函数实现还是在相应位置的语句块
    //一般函数
    function fun() {
        return true;
    }
    
    console.log(fun);//-->function fun() { return true;}
    console.log(var2fun);//--> undefined
    console.log(fun());//-->true
    console.log(var2fun());//--> 报错了
    
    //函数变量化 
    var2fun = function () { 
      returnfalse; 
    }

    函数的 预解释和闭包的关系

    大家知道函数预解释会前置,但是前置式有影响范围的,前置只是在最接近的母体(作用域)里面前置。不会前置到母体的母体

    function fun1() {
        return true;
    }
    
    //函数变量化
    (function() {
       
        console.log("1"+fun1()); //->false  fun1在这个函数母体内(预编译前置)后返回false
        function fun1 () {
            return false;
        }
        console.log("2"+fun1());  //->false 不用多说
    })()
    
    console.log("4"+fun1());   //->true 在上母体是(闭包)环境   本作用域不受到影响   即返回true

    匿名函数的 预解释和闭包的关系

    上代码和结果

    var fun1 = function() {
        return true;
    }
    
    //函数变量化
    ;(function () {
       console.log("1"+fun1); //->undefined  fun1在这个函数母体内(预编译前置)   会把 var fun1; 前置到闭包的前面,但是没有赋值、也不会影响外部函数fun1
       console.log("1"+fun1()); //->error  fun1 is not a function    虽然前置了
       var fun1 = function () {
            return false;
        }
        console.log("2"+fun1());  //->false 不用多说
    })()
    
    console.log("4"+fun1());   //->true   在上母体是(闭包)环境 

    语言表达水平匮乏啊!~

    不知道大家明白了没

    简单总结起来就是

    1、js预编译时候  会先定义变量,再预定义函数

    2、变量只做声明,不初始化;初始化在初始化语句执行时候。这个同时也适用于匿名函数的变量化。变量化的匿名函数会先声明,不会初始化

    3、函数的预解释是在就近的作用域(母体)内,最后语句解释也是在就近的作用域内

  • 相关阅读:
    201671030123叶虹 实验十四 团队项目评审&课程学习总结
    201671030123叶虹《英文文本统计分析》结对项目报告
    201671030123 叶虹 实验三作业互评与改进报告
    《构建之法》——三个问题
    201671030129 周婷 实验十四 团队项目评审&课程学习总结
    201671030129 周婷 《英文文本统计分析》结对项目报告
    201671030129 词频统计项目报告
    201671030129 周婷 实验三:作业互评与改进
    快速通读《现代软件工程——构建之法》
    201673020127 郁文曦 课程学习总结
  • 原文地址:https://www.cnblogs.com/liubl/p/5078745.html
Copyright © 2011-2022 走看看