JavaScript中的变量提升和函数提升
在EcmaScript5中只有全局作用域和函数作用域,EcmaScript6增加了块级作用域。
块级作用域(一对花括号{}即为一个块级作用域)
变量提升
console.log(name);  //undefined
var name = "Hello JoeXin!";
console.log(name);  //Hello JoeXin!
    function f() {
        console.log(name); //undefined
        var name = "JoeXin";
        console.log(name); //JoeXin
    }
f();
实质
var name; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值
console.log(name); // undefined
name = 'Hello JoeXin!'; // 此时才赋值
console.log(name); // 打印出Hello JoeXin!
function fn () {
  var name; // 变量提升,函数作用域范围内
  console.log(name);
   name = 'JoeXin';
  console.log(a);
}
fn();
函数提升
js中创建函数有两种方式:函数表达式和函数声明方式。只函数声明方式才存在函数提升!
函数声明方式提升
function myTest(){
    foo();
    function foo(){
        alert("我来自 foo");
    }
}
myTest();
函数表达式方式提升 失败
function myTest(){
   foo();
   var foo =function foo(){
        alert("我来自 foo");
   }
}
myTest();  //  打印出  foo is not a function
JavaScript中的变量提升和函数提升的更多相关文章
- 在javascript中关于变量与函数的提升
		在javascript中关于变量与函数的提升 一.简介 在javascript中声明变量与函数的执行步骤: 1.先预解析变量或函数声明代码,会把用var声明的变量或者函数声明的代码块进行提升操作 2. ... 
- 谈谈javascript中的变量提升还有函数提升
		在很多面试题中,经常会看到关于变量提升,还有函数提升的题目,所以我就写一篇自己理解之后的随笔,方便之后的查阅和复习. 首先举个例子 foo();//undefined function foo(){ ... 
- JavaScript系列文章:变量提升和函数提升
		第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ... 
- JavaScript:变量提升和函数提升
		第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ... 
- 对javascript变量提升跟函数提升的理解
		在写javascript代码的时候,经常会碰到一些奇怪的问题,例如: console.log(typeof hello); var hello = 123;//变量 function hello(){ ... 
- JavaScript: 变量提升和函数提升
		第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ... 
- js中变量提升和函数提升
		变量提升和函数提升的总结 我们在学习JavaScript时,会遇到变量提升和函数提升的问题,为了理清这个问题,现做总结如下,希望对初学者能有所帮助 我们都知道 var 声明的变量有变量提升,而 let ... 
- js中的变量提升和函数提升
		从上周开始,我所在的学习小组正式开始了angular的学习,angular是全面支持es6的,所以语法上和以前的angular有了很大的不同,比如变量声明时就抛弃了var,而选择了let和const: ... 
- JS 变量提升与函数提升
		JS 变量提升与函数提升 JS变量提升 变量提升是指:使用var声明变量时,JS会将变量提升到所处作用域的顶部.举个简单的例子: 示例1 console.log(foo); // undefined ... 
- JS——变量提升和函数提升
		一.引入 在了解这个知识点之前,我们先来看看下面的代码,控制台都会输出什么 var foo = 1; function bar() { if (!foo) { var foo = 10; } aler ... 
随机推荐
- 使用Python启动一个简单的服务器
			在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer,我们可以很简单的使用 python -m SimpleHTTPServ ... 
- redis数据操作笔记
			redis是key-value的数据结构,每条数据都是一个键值对键的类型是字符串 注意:键不能重复,值的类型分为五种:字符串string 哈希hash 列表list 集合set 有序集合zset 一. ... 
- Java并发面试题
			一.什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一 ... 
- [ICLR'17] DEEPCODER: LEARNING TO WRITE PROGRAMS
			DEEPCODER: LEARNING TO WRITE PROGRAMS Basic Information Authors: Matej Balog, Alexander L. Gaunt, Ma ... 
- R 544
			F2: 什么dfs根本不会啊,只会瞎贪心... 我们考虑先连哪些边,对于u,v两个点,如果u,v所在的联通块都与1相连的话,那我们肯定先不连这种边吧. 因为太亏了啊... 总而言之我们要在不影响答案的 ... 
- 在eclipse中使用Tomcat时出现Could not publish server ...错误
			在使用eclipse加载tomcat服务器运行项目时遇到问题: 在Tomcat的安装目录下的\conf\server.xml中将<Context>标签所对应的重复名称项目删除 这 ... 
- day15 十五、模块、from导入、起别名
			一.模块的概念 1.什么是模块:一系列功能的集合体 2.定义模块:创建一个py文件就是一个模块,该py文件名就是模块名 模块的四种存在方式 使用python编写的.py文件 包:一堆py文件的集合体 ... 
- F#周报2019年第6期
			新闻 应用F#挑战活动 Visual F#:锁定VS 2019正式版本 Visual F#:VS 2019工具性能 ML.NET 0.10发布 F# eXchange 2019即将来临 Visual ... 
- [Database.System.Concepts(6th.Edition.2010)].Abraham.Silberschatz. Ch8学习笔记
			Database Ch8.relational design 8.1 features of good design 8.1.1 larger alternatives why design is g ... 
- iOS系统NSNotificationCenter中的常用通知名称
			//音频 AVF_EXPORT NSString *const AVAudioSessionInterruptionNotification //音频中断出现 AVF_EXPORT NSString ... 
