JavaScript(js)函数声明与函数表达式的区别
在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的。
函数声明与函数表达式用代码写出来是这样的:
//函数声明
function say(){
console.log("函数声明")
}
//函数表达式
var say1 = function(){
console.log("函数表达式")
}
那我们来看看,这两种方式到底有什么不同呢?
首先,在函数调用方面,看下面的代码
say();
//函数声明
function say(){
console.log("函数声明")
}
这样的执行结果是什么呢?答案是打印出“函数声明”,那你看下面的代码
say1();
//函数声明
function say(){
console.log("函数声明")
}
//函数表达式
var say1 = function(){
console.log("函数表达式")
}
这样的执行结果是什么呢?注意,我们是调用的函数表达式,这样的结果是会报错,为什么呢?
一起来看看,首先我们先说第一种,函数声明的调用,函数声明的调用这个其实不用讲你就知道,函数声明了嘛,哪里都可以调用的(function会有预解析,预解析之后函数就存在了,所以那里都能调用它了)。至于下面这种函数表达式,为什么在函数表达式上面执行会报错呢?来看看下面的代码
console.log(a) var a=1;
这段代码的执行结果是什么呢?undefined,这是不是很像我们的函数表达式了,其实,如果说我们在函数表达式之前也打印一下这个say1(),结果也是undefined,原因就是带有var 的变量,当然这里说的是全局变量,它在预解析的时候会有一个变量提升,变量提升是什么意思呢,看上面这段代码,其实就相当于下面这段代码
var a; console.log(a); a=1;
现在知道了吧,a这个变量是存在的,并且初始化成了一个undefined,所以说我们的函数表达式也是一样的,它也有变量提升,在将函数赋值给你定义的变量之前,调用就会报它不是函数的错,而打印出来就是undefined,是不是很好理解呢,学到了吗?
如果你觉得对你有帮助的话,记得点个关注哦,我会持续更新更多你想知道的,谢谢!
JavaScript(js)函数声明与函数表达式的区别的更多相关文章
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- 详解Javascript 函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)
写作缘由: 平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种 ...
- js学习之函数声明与函数表达式区别[原创]
作为一名js初学者,与大家分享下.Javascript中有函数声明提升的功能,会优先编译函数声明部分.比如, ff(); function ff(){ alert("hello world. ...
- js函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){ return type==="Declaration ...
- 转载 JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明 function funDeclaration(type){ return type==="Declaration ...
- JS中函数声明与函数表达式的异同
相同点 注:函数声明和函数表达式的相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出.被赋值.作为参数传给其他函数等相关操作,不管函数是以什么方式被定义的,当然和其他值的 ...
- Js中函数声明和函数表达式的区别
先看以下几段烧脑的代码: f();//=>? var f = function () { console.log("var"); } function f() { conso ...
随机推荐
- linux环境下卸载mysql
第一种使用yum安装的mysql,使用如下命令进行卸载(不能确定使用何种方式安装的mysql情况下,按后续步骤一一进行处理即可): # yum remove mysql mysql-server my ...
- [2015普及组-D]推销员 思维que
题:https://www.cometoj.com/problem/0221 #include<iostream> #include<cstring> #include< ...
- TreeMap简介
在Map集合框架中,除了HashMap以外,TreeMap也是常用到的集合对象之一.与HashMap相比,TreeMap是一个能比较元素大小的Map集合,会对传入的key进行了大小排序.其中,可以使用 ...
- Linux文件与目录管理,常用命令总结
绝对路径: 以根目录 / 开始的相对路径: 相对于当前路径的写法 $PATH: 可执行文件路径的变量(出现在该变量下的文件可以在系统的任何目录下都可以执行) 获取路径的文件名: basen ...
- derby数据库
derby数据库 https://www.cnblogs.com/zuzZ/p/8107915.html Derby数据库的使用 https://www.cnblogs.com/wkfvawl/p/1 ...
- [洛谷P3806] [模板] 点分治1
洛谷 P3806 传送门 这个点分治都不用减掉子树里的了,直接搞就行了. 注意第63行 if(qu[k]>=buf[j]) 不能不写,也不能写成>. 因为这个WA了半天...... 如果m ...
- [LC] 42. Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- Java 9 新特性 – 内部类的方块操作符
方块操作符 ( <> ) 在 Java 7 中就引入了,目的是为了使代码更可读. 但是呢,这个操作符一直不能在匿名内部类中使用 Java 9 修正了这个问题,就是可以在匿名内部类中使用方块 ...
- 数据结构中的顺序表和链表(Python语言)
转载:https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体. ...
- Data Binding on Android
Data Binbing框架是在2015年Google I/O大会上最早提出来的,一直在Android开发者中热议,但是很少有真正在项目中用到.本文简单介绍Data Binding框架的简单用法以及其 ...