JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
作者:归去来兮-不如去兮 发布时间:2024-04-16 09:26:51
标签:js,var,function
某天写代码突然县道这个问题,顺势总结一波
JavaScript 函数和变量声明的“提前”(hoist)行为
简单的说 如果我们使用 匿名函数
var a = {}
这种方式, 编译后变量声明a 会“被提前”了,但是他的赋值(也就是a)并不会被提前。
也就是,匿名函数只有在被调用时才被初始化。
如果使用
function a () {};
这种方式, 编译后函数声明和他的赋值都会被提前。
也就是说函数声明过程在整个程序执行之前的预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。
看一个例子
function hereOrThere() { //function statement
return 'here';
}
console.log(hereOrThere()); // alerts 'there'
function hereOrThere() {
return 'there';
}
我们会发现alert(hereOrThere)
语句执行时会alert('there')
!这里的行为其实非常出乎意料,主要原因是JavaScript 函数声明的“提前”行为,简而言之,就是Javascript允许我们在变量和函数被声明之前使用它们,而第二个定义覆盖了第一种定义。换句话说,上述代码编译之后相当于
function hereOrThere() { //function statement
return 'here';
}
function hereOrThere() {//申明前置了,但因为这里的申明和赋值在一起,所以一起前置
return 'there';
}
console.log(hereOrThere()); // alerts 'there'
我们期待的行为
var hereOrThere = function () { // function expression
return 'here';
};
console.log(hereOrThere()); // alerts 'here'
hereOrThere = function () {
return 'there';
};
这段程序编译之后相当于:
var hereOrThere;//申明前置了
hereOrThere = function() { // function expression
return 'here';
};
console.log(hereOrThere()); // alerts 'here'
hereOrThere = function() {
return 'there';
};
总结
以上所述是小编给大家介绍的JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍网站的支持!
来源:https://www.cnblogs.com/wuvkcyan/archive/2018/02/28/8486381.html
0
投稿
猜你喜欢
- 用pycharm写Scrapy框架的时候发现无法引用items.py里的类且自己写的工具类也无法被应用难受了我快一天了,下面我捋一捋我的解决
- 通常,会话管理是通过服务器将 Session ID 作为一个 cookie 存储在用户的 Web 浏览器中来唯一标识每个用户会话。如果浏览器
- 利用问题的普遍性和特殊性来求解,代码如下:import unittestfrom datetime import datetimeclass
- 1:在终端下:mysql -V。 以下是代码片段:[shengting@login ~]$ mysql -Vmysql Ver 14.7 D
- python程序结构python“一切皆对象”,这是接触python听到最多的总结了。在python中最基层的单位应该就是对象了,对象需要靠
- 1. 简述我们在用scrapy爬取数据时,首先就要明确我们要爬取什么数据。scrapy提供了Item对象这种简单的容器,我们可以通过Item
- 下面是一些有助于更有效地使用 SQL 事件探查器的提示和技巧。运行的跟踪过多如果 Microsoft? SQL Server? 实例运行得过
- python第三方库的安装PyInstaller库PyInstaller库能够在不同操作系统下将python源文件打包,变成直接可运行的可执
- 本文实例讲述了Python3实现获取图片文字里中文的方法。分享给大家供大家参考,具体如下:一、运行环境(1) win10(2) pychar
- 前言计算机系统中有很多独占性的资源,在同一时刻只能每个资源只能由一个进程使用,我们之前经常提到过打印机,这就是一个独占性的资源,同一时刻不能
- 利用百度api实现人像动漫化百度API地址:https://ai.baidu.com/tech/imageprocess/selfie_an
- 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的。如果
- 本文实例讲述了Python实现抓取HTML网页并以PDF文件形式保存的方法。分享给大家供大家参考,具体如下:一、前言今天介绍将HTML网页抓
- 本文实例讲述了Python实现合并excel表格的方法。分享给大家供大家参考,具体如下:需求将一个文件夹中的excel表格合并成我们想要的形
- 分享几个字体设计:1.巧克力2.绿野邂逅是人间四月天3.去年花开的时候4.仲夏梦之夜5.芊芊茉莉香6.玫瑰人生7.真情告白8.遮掩锋芒
- 前言time库运行访问多种类型的时钟,这些时钟用于不同的场景。本篇,将详细讲解time库的应用知识。获取各种时钟既然time库提供了多种类型
- Jones向量假设光波沿z轴传播,那么其三个方向的电场分量可以表示为Jones矩阵能够保证二维列向量形状不变的运算有无穷多种,但最符合我们直
- OpenCV 对象跟踪这篇文章使用 OpenCV 中内置的八种不同的对象跟踪算法,实现对物体的跟踪。首先,介绍一下8种跟踪算法。然后,演示如
- 快速上手我们都知道go语言没有原生的注解,但是做业务开发有些时候没有注解确实不方便。go-doudou通过go语言标准库ast/parser
- 最近遇到SQL Server 2005 输入框不能输入中文,在网上查了N久,试验了十几次奏这个法子有用:“把你表中的自动编号列放到最后面”。