今天看js的变量提升问题,里面提到了函数提升。然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错

一、变量提升

  1. console.log(a)
  2. var a=100 //undefined
  3. console.log(a)//100

提升后相当于

  1. var a; //变量提升,全局作用域范围内,此时只是声明,并没有赋值
  2. console.log(a); //undefined
  3. a=100 //此时赋值
  4. console.log(a) //100

二、函数提升

注意:js中创建函数有两种方式:函数声明和函数表达式。只有函数声明才能函数提升!!!

(因为之前一直没有分清函数声明和函数表达式,所以在函数提升上经常出错 ==)

先简单认识下函数声明和函数表达式

  1. //函数声明
  2. function fn1(){
  3. console.log(12)
  4. }
  5. //函数表达式
  6. var fn2 = function () {
  7. console.log(222)
  8. }
  1. f1() //123
  2. f2() //error:f2 is not a function
  3. // 函数声明
  4. function f1() {
  5. console.log(123)
  6. }
  7. // 函数表达式
  8. var f2 = function() {
  9. console.log(222)
  10. }

提升后

  1. // 函数声明-----提升
  2. function f1() {
  3. console.log(123)
  4. }
  5. var f2;
  6. f1() //123
  7. f2() //error:f2 is not a function
  8. // 函数表达式
  9. f2 = function() {
  10. console.log(222)
  11. }

2.1函数声明提升

  1. fn('zhangsan') //zhangsan 20
  2. function fn(name) {
  3. age = 20
  4. console.log(name,age)
  5. var age
  6. }

提升后相当于

  1. function fn(name) {
  2. var age; //变量提升,定义age
  3. age=20; //变量赋值
  4. console.log(name,age)
  5. }
  6. fn('zhangsan')

2.2函数表达式

  1. fn1('lisi')//fn1 is not a function
  2. var fn1=function (name){
  3. age = 20
  4. console.log(name,age)
  5. var age
  6. }

提升效果

  1. var fn1;
  2. fn1('lisi')//fn1 is not a function
  3. fn1=function (name){
  4. var age;
  5. age = 20
  6. console.log(name,age)
  7. }

【JS】函数提升变量提升以及函数声明和函数表达式的区别的更多相关文章

  1. JS 函数提升&变量提升以及函数声明&函数表达式的区别

    感谢原文作者:迟早会有猫 原文链接:https://www.cnblogs.com/SidselLoong/p/10515809.html 今天看js的变量提升问题,里面提到了函数提升.然后发现自己之 ...

  2. js中的变量提升与函数提升

    先看看一个简单的代码 var str='Hello World'; alert(str);//弹出 Hello World 再看一段代码: var v='Hello World'; (function ...

  3. js中的变量提升和函数提升

    从上周开始,我所在的学习小组正式开始了angular的学习,angular是全面支持es6的,所以语法上和以前的angular有了很大的不同,比如变量声明时就抛弃了var,而选择了let和const: ...

  4. js函数、变量提升(hoisting)

    其实我只是想复习下变量提升的,然后看到了函数提升,然后再看到了函数声明.函数表达式. 有必要怀着敬仰之心提及园子里的TOM大叔的解密命名函数表达式,不愧是大叔,好好地脑补了下基础知识. 在ECMASc ...

  5. JS 会有变量提升和函数提升

    JavaScript变量函数声明提升(Hoisting)是在 Javascript 中执行上下文工作方式的一种认识(也可以说是一种预编译),从字面意义上看,"变量提升"意味着变量和 ...

  6. JS高级_变量提升和函数提升

    先执行变量提升,后执行函数提升 function a(){} var a console.log(typeof a)//function

  7. JS基础_变量提升和函数提升

    1.在函数中,不使用var声明的变量都会变为全局变量 function fun(){ d=10; //window.d=10; }; console.log(10);//10 2.定义形参就相当于在函 ...

  8. JavaScript中函数的变量提升问题

    函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量) 1.函数的声明 => function myFn(){}; 2.函数的表达式 => var myFn = fun ...

  9. JS中的 变量提升

    首先纠正下,文章标题里的 “变量提升” 名词是随大流叫法,“变量提升” 改为 “标识符提升” 更准确.因为变量一般指使用 var 声明的标识符,JS 里使用 function 声明的标识符也存在提升( ...

随机推荐

  1. Java 16 中新增的 Stream 接口的一些思考

    这里先提一个题外话,如果想看 JDK 不同版本之间有何差异,增加或者删除了哪些 API,可以通过下面这个链接查看: https://javaalmanac.io/jdk/17/apidiff/11/ ...

  2. Eclipse设置代码格式化使用空格代替TAB

    Java格式设置 打开Window-Preferences,找到Java-Code Style-Formatter,点击图片中的New.. 给配置起一个名字后,修改配置,找到 Indentation, ...

  3. 【JPA】使用JPA实现分页和模糊查询

    1.首先创建DAO层接口,实现JpaRepository和JpaSpecificationExecutor两个接口 JpaRepository<Admin, Integer> 泛型参数分别 ...

  4. docker简单安装

    docker的安装官网有很直接的教程,直达链接: Ubuntu:https://docs.docker.com/engine/install/ubuntu/ CentOS:https://docs.d ...

  5. linux安装mysql以及使用navicat连接mysql

    一.下载mysql 1.获取下载链接 进入官网:https://www.mysql.com 点击downloads --> MySQL Community (GPL) Downloads  -- ...

  6. 微服务架构攀登之路(四)之使用gRPC构建微服务

    做一个处理用户信息的微服务 客户端通过用户名,可以从服务端查询用户的基本信息 gRPC proto user.proto 定义客户端请求.服务端响应的数据格式 user.pb.go 自动生成的,为数据 ...

  7. iframe 去除边框 背景透明等设置 待修改

    <iframe name="file_frame" src="UploadFile.jsp" frameborder=no  border=0  marg ...

  8. spring boot 中使用swagger

    一.pom.xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox ...

  9. Docker 安装与常用命令

    目录 Docker 安装 1)安装 2)启动 3)镜像加速器 Docker 常用命令 1)Docker 进程相关命令 2)Docker 镜像相关命令 docker search:查找镜像仓库中的镜像 ...

  10. 带你十天轻松搞定 Go 微服务系列(一)

    本文开始,我们会出一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建(本文) 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Au ...