Js中函数声明和函数表达式的区别
先看以下几段烧脑的代码:
f();//=>?
var f = function () {
console.log("var");
} function f() {
console.log("function");
}
控制台打印结果"function"。
另一段代码
    var f = function () {
      console.log("var");
    }
    function f() {
      console.log("function");
    }
    f();//=>?
控制台打印结果"var"。
关于函数声明和函数表达式更具体的定义在javascript函数中有相关详细的介绍,这里就不再叙述。上述代码主要用于引出函数声明和函数表达式的区别。
函数声明和函数表达式的区别本质其实是函数声明提升和变量声明提升的区别。
一般变量的声明为以下形式:
var a=10;
js在预编译阶段,是这么处理的:
//预编译阶段
var a;
//执行阶段
a=10;
预编译阶段,js将其分解为变量声明与变量赋值。
一般函数声明:
    function fDeclaration(){
        console.log("declaration");
    }
预编译阶段,js将其分解为类似以下的变量声明与变量赋值:
//预编译
var fDeclaration;
fDeclaration = function () {
console.log("declaration");
}
在标识符相同的情况下,js如何处理变量与函数呢?
    var f = function () {
      console.log("var");
    }
    function f() {
      console.log("function");
    }
    f();//=> 在控制台会打印什么结果呢?
函数声明提前优先于变量声明提前。因此上面代码JS预编译会做类似如下处理:
/* 预编译阶段
*函数声明提前优先级别更高,先进行预编译,并对f进行了赋值。
*在预编译阶段后于函数声明,f经历两次赋值,后来的赋值替代了原先的赋值,表现为f执行函数表达式。
*/ //函数声明预编译阶段
var f;
f = function () {
console.log("function");
}
//函数表达式提前预编译,由于它是变量声明,变量声明提前是只有声明提前,而没有赋值提前。
//重复的声明,js会忽略
var f;
/*执行阶段*/
//变量f再次赋值
f = function () {
console.log("var");
}
f();//=>"var"
Js中函数声明和函数表达式的区别的更多相关文章
- JS中函数声明与函数表达式的不同
		
Js中的函数声明是指下面的形式: function functionName(){ } 这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如 var functionName ...
 - JS中函数声明与函数表达式的异同
		
相同点 注:函数声明和函数表达式的相同点包括但不限于以下几点 函数是一个值,所以和其他值一样,函数也可以进行被输出.被赋值.作为参数传给其他函数等相关操作,不管函数是以什么方式被定义的,当然和其他值的 ...
 - JS中的函数声明和函数表达式的区别,即function(){}和var function(){},以及变量提升、作用域和作用域链
		
一.前言 Uncaught TypeError: ... is not a function function max(){}表示函数声明,可以放在代码的任何位置,也可以在任何地方成功调用: var ...
 - JS的一些总结(函数声明和函数表达式的区别,函数中的this指向的问题,函数不同的调用方式,函数也是对象,数组中的函数调用)
		
一.函数声明和函数表达式的区别: 函数声明放在if——else语句中,在IE8中会出现问题 函数表达式则不会 <script> if(true){ function f1(){ conso ...
 - js中的函数声明和函数表达式的区别
		
目录 一.声明与表达式的格式 1.1 声明式的格式: 1.2 表达式的格式: 二.区别 2.1 函数表达式可以直接在后面加括号执行,而函数声明不可以. 2.2 函数表达式可以被提前解析出来 2.3 命 ...
 - js函数声明和函数表达式的区别
		
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
 - 转载 js函数声明和函数表达式
		
在js中函数有两种表达方式.1 函数声明 2 函数表达式 函数声明 function sayname(){ alert("li lei"); } 函数表达式 var sayname ...
 - JavaScript(js)函数声明与函数表达式的区别
		
在JavaScript中,函数是经常用到的,在实际开发的时候,我想很多人都没有太在意函数的声明与函数表达式的区别,但是呢,这种细节的东西对于学好js是非常重要的. 函数声明与函数表达式用代码写出来是这 ...
 - 【JS】函数提升变量提升以及函数声明和函数表达式的区别
		
今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...
 
随机推荐
- 多测师讲解_ 高级自动化测试selenium_001基本学习
			
高级自动化测试python+selenium教程手册 --高级讲师肖sir 第 1 章webdriver 环境搭建好了,我们正式学习 selenium 的 webdriver 框架,它不像 QTP 之 ...
 - hashCode()方法源码分析
			
执行代码 public class Demo06 { public static void main(String[] args) { String s="hello"; Syst ...
 - 【LWJGL3】LWJGL3的内存分配设计,第一篇,栈上分配
			
简介 LWJGL (Lightweight Java Game Library 3),是一个支持OpenGL,OpenAl,Opengl ES,Vulkan等的Java绑定库.<我的世界> ...
 - 洛谷 CF1012C Hills(动态规划)
			
题目大意: 有几座山,如果一座山左右两边的山比它矮,那么可以在这个山上建房子,你有一台挖掘机,每天可以挖一座山一米,问你需要花多少代价可以分别盖1.2.3--座房子.(给出山的数量,以及每座山的高度) ...
 - spring boot:方法中使用try...catch导致@Transactional事务无效的解决(spring boot 2.3.4)
			
一,方法中使用try...catch导致@Transactional事务无效的解决方法 1,问题的描述: 如果一个方法添加了@Transactional注解声明事务, 而方法内又使用了try catc ...
 - python matplotlib配置
			
import matplotlib.pyplot as plt import matplotlib as mpl from matplotlib.font_manager import FontPro ...
 - c++数组的替代品
 - C++ 多线程 std::thread 使用总结
			
在C++ 11之前,官方并没有支持线程库.C++ 11通过标准库引入了对 thread 类的支持,大大方便了完成多线程开发的工作. std::thread 构造函数 (1)thread() noex ...
 - Codeforces Educational Round 92 赛后解题报告(A-G)
			
Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...
 - naicat如何查看表关系
			
1.navict版本为:navict premium https://www.php.cn/tool/navicat/427617.html 参考上面链接 2. 这个版本的 目前就这些,后续进行补充