博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
提升hoisting
阅读量:6962 次
发布时间:2019-06-27

本文共 1121 字,大约阅读时间需要 3 分钟。

提升hoisting

##变量提升 一个变量只属于一个作用域, 通过var声明的变量会发生变量提升。

function(){  foo = 1;  var foo;  console.log(foo); // output:1}复制代码

注意只有变量声明被提升了,赋值语句没有。

function(){  foo = 1;  var foo = 2;}等价于function(){  var foo;  foo = 1;  foo = 2;}下例中因为有变量提升所以foo不是gobal。function(){  console.log(foo);  foo = 1;  console.log(foo);  var foo = 2;  console.log(foo);}// output: undefined 1 2复制代码

另一个例子解释了为什么通过 var fnSomeFunction = function(){};不会发生函数提升。

console.log(fnSomeFunction);//output: undefined'fnSomeFunction(); // output: error fnSomeFunction is not a functionvar fnSomeFunction = function(){  console.log("i am here");}//fnSomeFunction 终究是变量,所以提升到最顶。至使在赋值语句之前无法调用函数。复制代码

函数提升

通过常规函数声明可发生函数提升,且包括定义部分。

foo();//output: i am herefunction foo(){console.log('i am here');}复制代码

需要特别提醒,函数提升早于变量提升,但是var不会覆盖同名函数。

console.log(typeof foo); //output: functionvar foo = 1;console.log(typeof foo); //output:numberfunction foo(){console.log('i am here');}//等价于function foo(){console.log('i am here');var fooconsole.log(typeof foo); //output: functionfoo = 1;console.log(typeof foo); //output:number}复制代码

转载于:https://juejin.im/post/5aa531a251882555677e2e1b

你可能感兴趣的文章
十二步创建你的第一个JavaScript库
查看>>
【.NET】MD5的用法(对文件、字符串)
查看>>
javascript 编辑网页
查看>>
常用名词缩写
查看>>
简单jQuery实现选项框中列表项的选择
查看>>
ogr2ogr: Export Well Known Text (WKT) for one feature to a CSV file
查看>>
关于MYSQL中like 检索汉字问题。
查看>>
Android中dip、dp、sp、pt和px的区别
查看>>
EF 5.0 帮助类 增删改查
查看>>
统一动态代理系统操作日志
查看>>
C++非类型模板参数
查看>>
VS2010水晶报表的添加与使用
查看>>
[翻译] DTCoreText 从HTML文档中创建富文本
查看>>
在系统中使用read函数读取文件内容
查看>>
windows下python脚本程序的运行
查看>>
MyEclipse 10 中安装Android ADT 22插件的方法
查看>>
第19章 解释器模式(Interpreter Pattern)
查看>>
百度站长工具进击site结果页面[SITE特型]
查看>>
Activity的setResult方法
查看>>
ffmpeg+ffserver搭建流媒体服务器
查看>>