函数,匿名函数新认知(与预解释、作用域的关系)
大家都应该知道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
函数,匿名函数新认知(与预解释、作用域的关系)相关推荐
- 内置函数 匿名函数 eval exec execute compile sorted map filter等常见函数 repr chr ord...
内置函数 什么是内置函数? 就是python给你提供的. 拿来直接用的函数, 比如print., input等等. 截⽌止 到python版本3.6.2 python⼀共提供了了68个内置函数. 他们 ...
- 【Kotlin】Kotlin 函数总结 ( 具名函数 | 匿名函数 | Lambda 表达式 | 闭包 | 内联函数 | 函数引用 )
文章目录 一.函数头声明 二.函数参数 1.默认参数值 2.具名参数 三.Unit 函数 四.TODO 函数抛出异常返回 Nothing 类型 五.反引号函数名 六.匿名函数 七.匿名函数的函数类型 ...
- python笔记4 内置函数,匿名函数.递归函数 面向对象(基础, 组合,继承)
内置函数 eval和exec eval :执行字符串中的代码并将结果返回给执行者,有返回值 exec:执行字符串中的代码,往往用于执行流程语句,没有返回值. s1 = '1+2' s2 = 'prin ...
- 内置函数 ,匿名函数
python之内置函数,匿名函数 内置函数 我们一起来看看python里的内置函数.什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等.截止到python版本 ...
- 【python入门第二十二天】python函数-匿名函数
匿名函数 匿名函数 匿名函数的应用 匿名函数当做实参 匿名函数 当我们在创建函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.这省去了我们挖空心思为函数命名的麻烦,也能少写不少代码,很多 ...
- Python进阶:函数式编程(高阶函数,map,reduce,filter,sorted,返回函数,匿名函数,偏函数)...啊啊啊...
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- Go语言 一级函数 --- 匿名函数、高阶函数、闭包
文章目录 导言 一级函数 一级函数是什么? 匿名函数 自定义函数类型 高阶函数 将 `x` 函数 作为 `y`函数 的参数 从 `x`函数 中,返回 `y`函数 闭包 一级函数的实际用法 原作者留言 ...
- 【Flutter】Dart 函数 ( 函数构成 | 私有函数 | 匿名函数 | 函数总结 )
文章目录 一.Dart 函数构成 二.Dart 私有函数 三.Dart 匿名函数 四.完整代码示例 五.Dart 方法总结 六. 相关资源 一.Dart 函数构成 Dart 函数构成 : 方法名 , ...
- python 用lambda表达式代替简单的函数, 匿名函数
当一些函数很简单,仅仅只是计算一个表达式的值的时候,就可以使用lambda表达式来代替了. 比如: >>> add = lambda x,,y : x + y >>> ...
- PHP的闭包函数匿名函数
匿名函数 允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值 看到这个方法显然我们只需要用一次,所以没有必要再给他去命名,也没有多大的必要再去把他赋值给一个变量 闭包 ...
最新文章
- #串口通信超时处理_简单通信协议
- 水凝胶 静电纺丝_吉林大学:静电纺丝与水凝胶制备技术结合构建高强度光控智能水凝胶驱动器...
- [转载] 中华典故故事(孙刚)——02 半路杀出个程咬金
- 世界卫生日:大数据解读抑郁症群体
- 软件打开时间、窗体透明度、背景色---《用delphi开发共享软件》-15.1任务管理器...
- ehcache 手动刷新缓存_【第 21 期】一个架构师的缓存修炼之路
- Hadoop之Hadoop企业优化(HDFS小文件优化)
- webService学习记录
- SAP云平台 Document Information Extraction服务测试
- 关于background-*的一些属性
- 10个高效Linux技巧及Vim命令对比
- java按钮随机移动_java – 使按钮移动触摸我们触摸的确切位置
- 2022年数据库云管平台白皮书
- 有4件事,我很后悔~
- java aes mysql blob_使用带有ORDER子句的AES_DECRYPT在MySQL中返回BLOB数据
- Java多线程:线程停止
- 关于分辨率和地图打印的一些问题
- Material Dialogs
- python入口文件详解_Python基础系列讲解——那些py文件中容易忽略的细节
- 更新CocoaPods碰到的问题及知识点
热门文章
- 函数 —— fork()分叉函数
- 面试Nginx的几个常见问题(
- 一个简单的mysql存储过程
- JAVA取数两个数组交集,考虑重复和不重复元素
- MariaDB 数据库迁移
- Java 9 揭秘(14. HTTP/2 Client API)
- 公共的service接口
- Failed to load or instantiate TagLibraryValidator class: org.apache.taglibs.
- 基于Spring AOP的JDK动态代理和CGLIB代理
- 利用 sys.sysprocesses 检查 Sql Server的阻塞和死锁