大家都应该知道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在这个函数母体内(预编译前置)后返回falsefunction 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; 前置到闭包的前面,但是没有赋值、也不会影响外部函数fun1console.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、函数的预解释是在就近的作用域(母体)内,最后语句解释也是在就近的作用域内

转载于:https://www.cnblogs.com/liubl/p/5078745.html

函数,匿名函数新认知(与预解释、作用域的关系)相关推荐

  1. 内置函数 匿名函数 eval exec execute compile sorted map filter等常见函数 repr chr ord...

    内置函数 什么是内置函数? 就是python给你提供的. 拿来直接用的函数, 比如print., input等等. 截⽌止 到python版本3.6.2 python⼀共提供了了68个内置函数. 他们 ...

  2. 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )

    文章目录 一.函数头声明 二.函数参数 1.默认参数值 2.具名参数 三.Unit 函数 四.TODO 函数抛出异常返回 Nothing 类型 五.反引号函数名 六.匿名函数 七.匿名函数的函数类型 ...

  3. python笔记4 内置函数,匿名函数.递归函数 面向对象(基础, 组合,继承)

    内置函数 eval和exec eval :执行字符串中的代码并将结果返回给执行者,有返回值 exec:执行字符串中的代码,往往用于执行流程语句,没有返回值. s1 = '1+2' s2 = 'prin ...

  4. 内置函数 ,匿名函数

    python之内置函数,匿名函数 内置函数 我们一起来看看python里的内置函数.什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等.截止到python版本 ...

  5. 【python入门第二十二天】python函数-匿名函数

    匿名函数 匿名函数 匿名函数的应用 匿名函数当做实参 匿名函数 当我们在创建函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.这省去了我们挖空心思为函数命名的麻烦,也能少写不少代码,很多 ...

  6. Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  7. Go语言 一级函数 --- 匿名函数、高阶函数、闭包

    文章目录 导言 一级函数 一级函数是什么? 匿名函数 自定义函数类型 高阶函数 将 `x` 函数 作为 `y`函数 的参数 从 `x`函数 中,返回 `y`函数 闭包 一级函数的实际用法 原作者留言 ...

  8. 【Flutter】Dart 函数 ( 函数构成 | 私有函数 | 匿名函数 | 函数总结 )

    文章目录 一.Dart 函数构成 二.Dart 私有函数 三.Dart 匿名函数 四.完整代码示例 五.Dart 方法总结 六. 相关资源 一.Dart 函数构成 Dart 函数构成 : 方法名 , ...

  9. python 用lambda表达式代替简单的函数, 匿名函数

    当一些函数很简单,仅仅只是计算一个表达式的值的时候,就可以使用lambda表达式来代替了. 比如: >>> add = lambda x,,y : x + y >>> ...

  10. PHP的闭包函数匿名函数

    匿名函数 允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值 看到这个方法显然我们只需要用一次,所以没有必要再给他去命名,也没有多大的必要再去把他赋值给一个变量 闭包 ...

最新文章

  1. #串口通信超时处理_简单通信协议
  2. 水凝胶 静电纺丝_吉林大学:静电纺丝与水凝胶制备技术结合构建高强度光控智能水凝胶驱动器...
  3. [转载] 中华典故故事(孙刚)——02 半路杀出个程咬金
  4. 世界卫生日:大数据解读抑郁症群体
  5. 软件打开时间、窗体透明度、背景色---《用delphi开发共享软件》-15.1任务管理器...
  6. ehcache 手动刷新缓存_【第 21 期】一个架构师的缓存修炼之路
  7. Hadoop之Hadoop企业优化(HDFS小文件优化)
  8. webService学习记录
  9. SAP云平台 Document Information Extraction服务测试
  10. 关于background-*的一些属性
  11. 10个高效Linux技巧及Vim命令对比
  12. java按钮随机移动_java – 使按钮移动触摸我们触摸的确切位置
  13. 2022年数据库云管平台白皮书
  14. 有4件事,我很后悔~
  15. java aes mysql blob_使用带有ORDER子句的AES_DECRYPT在MySQL中返回BLOB数据
  16. Java多线程:线程停止
  17. 关于分辨率和地图打印的一些问题
  18. Material Dialogs
  19. python入口文件详解_Python基础系列讲解——那些py文件中容易忽略的细节
  20. 更新CocoaPods碰到的问题及知识点

热门文章

  1. 函数 —— fork()分叉函数
  2. 面试Nginx的几个常见问题(
  3. 一个简单的mysql存储过程
  4. JAVA取数两个数组交集,考虑重复和不重复元素
  5. MariaDB 数据库迁移
  6. Java 9 揭秘(14. HTTP/2 Client API)
  7. 公共的service接口
  8. Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.
  9. 基于Spring AOP的JDK动态代理和CGLIB代理
  10. 利用 sys.sysprocesses 检查 Sql Server的阻塞和死锁