JS中函数表达式与函数声明的区别
hello,沐晴又来更新啦,今天呢,跟大家讲讲让人头疼的函数表达式和函数声明,反正我当初看那本高级程序的时候,是没怎么看太透,哈哈。我是个比较重基础的人,跟我一起探讨函数表达式和函数声明的世界吧。
首先呢,先看看他们的颜值:
函数声明:function 函数名(){} 函数表达式:function 函数名(可写可不写)(){}; (不写名叫做匿名函数表达式。写名叫做命名函数表达式。推荐用匿名的。)
这么一看长的好像没啥区别,反正颜值也都不高。那么我们如何区别是函数表达式还是函数声明呢?答案就是看上下文,何谓上下文,你懂的,就像语文作文里面的上下文。
函数声明:function aaa(){} (这种就是函数声明,上下文啥也木有。) 函数表达式:
var a = function aaa(){} : 命名函数表达式
var a = function (){} :匿名函数表达式
(function aaa(){}) : 表达式
位运算符:
~funtion aaa(){} : 表达式
-funtion aaa(){} : 表达式
+funtion aaa(){} : 表达式
!funtion aaa(){} : 表达式 (有上面的这些表现形式的都是函数表达式)
OK,看了表现上的不一样,我们已经知道如何区别他们了,下面就来了解一下他们真正在使用上的区别。
1 函数表达式可以直接后面加括号执行 而函数声明是不可以。
function aaa(){}(); // 不可以执行。必须得通过函数名调用 aaa();
var a = function aaa(){} (); // 加括号就可以直接执行
2 函数声明可以提前被解析出来。表达式不可以。
比如,只要你声明过函数,不管函数是在哪个位置声明的,它都会被提前解析出来,所以在任何地方调用都不会有问题。但是函数表达式不会被提前解析,所以你能在函数表达式之前就调用它。(关于解析机制,下篇我会认真的写出来分享给大家。)
aaa(); //可以调用 a(); //调用会出错 function aaa(){}; // 函数声明
var a = function aaa(){}; // 函数表达式
主要的就是这两方面的区别,相对于函数声明,表达式可以让我们不用费劲想那么多函数名,代码也更简单,等到我写闭包的时候,会体现它的优点。
好的,今天的探讨就到这里了,如有错误,欢迎指正。我是沐晴。下篇不见不散。
JS中函数表达式与函数声明的区别的更多相关文章
- js中 函数声明/函数表达式/匿名函数/箭头函数/立即执行函数
函数声明: function add(a, b) { // ... } 1.顾名思义,声明一个函数, 用关键字 “function” 来告诉,这是一个函数. 2.任何地方,想用就可以拿过来使用 函数表 ...
- js函数表达式和函数声明的区别
我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...
- js基础:函数表达式和函数声明
函数表达式和函数声明的区别.实际上,解析器在向执行环境中加载数据是,对函数表达式和函数声明并非一视同仁.解析器会率先读取函数声明,并使其在执行任何代码之前可用.而函数表达式,则必须等到解析器执行到它所 ...
- JS中的几种函数
函数可以说是js中最具特色的地方,在这里我将分享一下有关函数的相关知识: 包装函数: (function foo(){...})作为函数表达式意味着foo只能在...所代表的位置中被访问 ...
- 【repost】js中(function(){…})()立即执行函数写法理解
摘要: javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ...
- js中(function(){…})()立即执行函数写法理解
文章摘自https://my.oschina.net/u/2331760/blog/468672?p={{currentPage+1}} 摘要: javascript和其他编程语言相比比较随意,所以j ...
- js中(function(){…})()立即执行函数写法理解(转载oschina)
( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,最初我以为是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到 ...
- 第七章 函数表达式和函数声明,关于this对象 ,私有作用域(function(){})() ,私有变量和特权方法
一:函数表达式和函数声明 1:函数声明和函数表达式的区别 ①函数声明不需要分号结尾 ②函数声明有函数提升的特点 ③函数声明后面不能跟圆括号直接调用,因为javascript将function关键字当作 ...
- 深入理解js中的立即执行函数(function(){…})()
javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...
随机推荐
- [Node.js] 02 - Read Eval Print Loop
视频课程:带你入门Nodejs,提及了非常多的后端知识点 发布时间: 2017年10月7日 课程时长:193 分钟 类别:后端 课时:22 npm Resource: npm模块管理器[阮一峰] np ...
- Mac下git通过SSH进行免密码安全连接github
Git——The stupid content tracker(傻瓜内容跟踪器) Git是Linux的缔造者Linus Torvalds为了帮助管理Linux内核源码而开发的一款免费.开源的分布式版本 ...
- 7.8CSS部分的学习!
<!DOCTYPE html> <html> <head> <title>CSS元素选择器</title> <style type=& ...
- Linux----常用操作
------------------------------------------------------------------------Linux常用操作------------------- ...
- web.config 加密/解密 正确版
一般加密方式: 利用Aspnet_regiis: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 aspnet_regiis -pe "co ...
- IIS Asp.Net 访问 Com组件 报拒绝访问
IIS Asp.Net 访问 Com组件 报拒绝访问 解决方法: IIS 程序池->高级设置->进程模式->标识->内置帐户=LocalSystem
- 关于Linux一些问题和答案
1.怎样切换输入法? 2.怎样安装KDE? $sudo apt-get install kubuntu-desktop 3.安装KDE以后,怎样切回到默认的gnome? 注销,返回到登录界面,在“登录 ...
- [No0000144]深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing)理解堆与栈1/4
前言 虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC).另外,了解内存管理可以帮助我们理解在每一个程 ...
- Spark安装部署(local和standalone模式)
Spark运行的4中模式: Local Standalone Yarn Mesos 一.安装spark前期准备 1.安装java $ sudo tar -zxvf jdk-7u67-linux-x64 ...
- Oracle安装部署之Win7下oracle11g数据库的安装及配置
1.下载安装包 到oracle官网downloads下下载(第一次下载需要注册账号). Win7 64位下载64位oracle11g安装包 Win7 32位下载32位oracle11g(Oracle_ ...