JavaScript函数声明与函数表达式 如何定义一个函数
在JavaScript里有两种定义函数的方法
函数声明
function 函数名称 (参数:可选){ 函数体 }
函数表达式
function 函数名称(可选)(参数:可选){ 函数体 }
function foo(){} 函数声明
var bar = function foo(){}; 函数表达式
new function bar(){}; 函数表达式
function foo(){ function bar(){} 函数声明}
(function(){})() 函数表达式
+function(){}() 函数表达式
!function(){}() 函数表达式
;(function(){})() 函数表达式,分号反正前面没加分号,解析错误
函数声明与函数表达式的一些细微的不同在JavaScript里函数声明会有一个hoist的过程,也就是说在函数执行的之前,函数体就已经被解析了。一个典型的例子
if (true) { function foo() { return "first"; } } else { function foo() { return "second"; } } foo();
正常情况下,得到的结果是 second
而
var foo; if (true) { foo = function() { return "first"; }; } else { foo = function() { return "second"; }; } foo();
我们能得到想要的结果
http://www.nowamagic.net/librarys/veda/detail/1630
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85970.html
摘要:如下代码输出的结果是代码执行分为两个大步预解析的过程代码的执行过程预解析与变量声明提升程序在执行过程中,会先将代码读取到内存中检查,会将所有的声明在此进行标记,所谓的标记就是让解析器知道有这个名字,后面在使用名字的时候不会出现未定义的错误。 showImg(https://segmentfault.com/img/remote/1460000012922850); 如下代码输出的结果是...
摘要:而闭包的神奇之处正是可以阻止事情的发生。拜所声明的位置所赐,它拥有涵盖内部作用域的闭包,使得该作用域能够一直存活,以供在之后任何时间进行引用。依然持有对该作用域的引用,而这个引用就叫闭包。 引子 先看一个问题,下面两个代码片段会输出什么? // Snippet 1 a = 2; var a; console.log(a); // Snippet 2 console.log(a); v...
摘要:匿名函数是不能单独写的,所以就提不上立即执行了。六立即执行函数在闭包中的应用立即执行函数能配合闭包保存状态。来看下上节内容中闭包的例子现在,我们来利用立即执行函数来简化它第一个匿名函数执行完毕后,返回了第二个匿名函数。 前面的闭包中,提到与闭包相似的立即执行函数,感觉两者还是比较容易弄混吧,严格来说(因为犀牛书和高程对闭包的定义不同),立即执行函数并不属于闭包,它不满足闭包的三个条件。...
摘要:不同的是函数体并不会再被提升至函数作用域头部,而仅会被提升到块级作用域头部避免全局变量在计算机编程中,全局变量指的是在所有作用域中都能访问的变量。 ES6 变量作用域与提升:变量的生命周期详解从属于笔者的现代 JavaScript 开发:语法基础与实践技巧系列文章。本文详细讨论了 JavaScript 中作用域、执行上下文、不同作用域下变量提升与函数提升的表现、顶层对象以及如何避免创建...
摘要:函数提升在里有两种方式创建函数,通过函数声明和函数表达式。函数声明用指定的参数来定义函数。提示不要在中进行函数声明。问题输出两个都是用函数声明的函数,将被提升到的局部作用域顶端。函数本身将作为函数声明在全局范围内提升。 作者关于提升的话题,总共有两篇。(后来又有一个讨论篇),再次搬过来。水平有限,如果翻译的不准确请包涵,并去看原文。下面开始: 这是我之前的关于提升的文章,标题为《用le...
阅读 2151·2023-04-26 03:06
阅读 3607·2023-04-26 01:51
阅读 2104·2021-11-24 09:38
阅读 2474·2021-11-17 17:00
阅读 2342·2021-09-28 09:36
阅读 951·2021-09-24 09:47
阅读 2595·2019-08-30 15:54
阅读 1568·2019-08-30 15:44