Day3--js--可恶之变量声明提升大法.。。
1.首先大家看一下下面的代码,判断下会输出什么结果:
var foo = 1; function bar() {if(!foo) {var foo = 10;}alert(foo); } bar();//10
2.
你是否会疑惑条件语句if(!foo)并不会被执行呀,为什么foo会被赋值为10.
再来看看第二个例子:
var a = 1; function b() {a = 10;return;function a() {} } b(); alert(a);
3.Javascript作用域
让我们先来看一下Java中的一个例子:
public int result() {int x = 1;System.out.println(x); //1if(true) {int x = 2;System.out.println(x); //2 }System.out.println(x); //1 }
因为在Java中,我们有块级作用域(block-level scope)。在一个代码块中的变量不会覆盖掉代码块外面的变量。
我们不妨试一下在Javascript中的表现:
var x = 1; console.log(x); //1 if(true) {var x = 2;console.log(x); //2 } console.log(x) //2
因为Javascript是一种函数级作用域(function-level scope),
那么在Javascript中,我们怎么实现一种块级作用域的效果呢?答案是闭包:
function foo() {var x = 1;if(x) {(function () {var x = 2;}());}x is still 1. }
4.Javascript变量提升
我们注意到,变量x的定义被移动到函数的最顶部,在bar()后,再对其进行赋值。
再来看一个栗子,下面这两段代码其实是等价的:
function foo() {if(false) {var x = 1;}return;var y = 1; }
function foo() {var x,y;if(false) {x = 1;}return;y = 1; }
我们都知道,创建一个函数的方法有两种,一种是通过函数声明function foo() {},
另一种是通过定义一个变量 var foo = function() {}
来看下面的栗子:
function test() {foo(); //Type error, foo is not a functionbar(); //will alert 'bar'var foo = function() {alert('foo');}function bar() {alert('bar');} } test();
1.我们需要重点注意的是,只有函数声明形式才能被提升。
变量赋值并没有被提升,只是声明被提升了。但是,函数的声明有点不一样,函数体也会一同被提升
function test3() {fn();function fn() {log("我来自fn"); }}test3();function test4() {fn(); // fn is not a functionvar fn = function fn() {alert("我来自 fn test4");}}test4();
2
var n =10; function test (){console.log(n);var n = 20;console.log(n)}test()//undefined 20
3.
1 function text6() {2 function a() {}3 var a;4 log(a); //打印出a的函数体5 6 var b;7 function b() {}8 log(b); //打印出b的函数体 9 10 // !注意看,一旦变量被赋值后,将会输出变量 11 var c = 12 12 function c() {} 13 log(c); //12 14 15 function d() {} 16 var d = 12 17 log(d); //12 18 } 19 text6();
4.
tt ="ee";function b(){function test(){alert(tt);var tt ="ff"}test()}b()//undefined
tt ="ee";function b(){function test(){var tt;alert(tt);tt="ff"}test()}b()//undefined
5.
console.log(b)function b(){console.log(2); } console.log(b)//最后输出两次b函数结构
6.
var age = 10; function test(){console.log(age) } test()//10
7.
function test(){var age = 10;function inner(){var age = 20;console.log(age);//20 }inner();console.log(age);//10 } test()
8.未完待续....
转载于:https://www.cnblogs.com/moonzwt/p/9445793.html
Day3--js--可恶之变量声明提升大法.。。相关推荐
- ES5和ES6中的变量声明提升
ES5和ES6中的变量声明提升 Example1: a=2; var a; console.log( a ); //结果为2 Example2: console.log( a ); //结果是unde ...
- 函数声明和变量声明提升
var a; // 声明一个变量,标识符为a function a() { // 声明一个函数,标示符也为a } alert(typeof a); 显示的是"function",即 ...
- php变量 声明提升,TypeScript:let和const变量声明
在开始介绍let和const变量声明前,有必要先了解下JavaScript里的var变量声明. var变量声明 全局声明 var声明在函数体外,所声明的变量为全局变量.var name = " ...
- Js 变量声明提升和函数声明提升
Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...
- javascript变量声明提升(hoisting)
http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 javascript的变量声明具有hoisting机制,Jav ...
- php变量 声明提升,JavaScript 变量提升
JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 以下两个实例将获得相 ...
- html5前端开发培训机构,JavaScript变量声明提升
学习路线 第一阶段:网页制作 HTML:常用标签,锚点,列表标签,表单标签,表格标签,标签分类,标签语义化,注释,字符实体 CSS:CSS介绍,全局样式,行内样式,内联样式,选择器,字体样式值,文本样 ...
- JS变量(声明)提升和函数声明提升
目录 一.概念理解 1.变量声明提升 2.函数声明提升(又叫函数提升) 变量提升和函数提升的优先级 小结: 一.概念理解 变量提升:在当前作用于中,js代码自上而下执行之前,浏览器会把所有带var/f ...
- JS中函数和变量声明的提升
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
最新文章
- Java项目:药店信息管理系统(java+SSM+JSP+layui+maven+mysql)
- python 用递归求质数_编写一个递归函数,它接受和整数,如果它的所有数字都是质数,则返回“True”...
- Pandas通过某列不是NaN来进行筛选
- react 合并数组_React快速上手
- Spring AOP(一):概览
- 神圣的NLP!一文理解词性标注、依存分析和命名实体识别任务
- 命名参数_告别编码5分钟,命名2小时!史上最全的Java命名规范参考!
- pytorch Tensor autograd functions
- 源代码管理分析工具 - Source Navigator
- UML建模之时序图(Sequence Diagram)转
- Windows下iperf使用(cmd窗口)三种方法
- 双向循环链表讲解及实现
- 人工智能案例:车厂特斯拉的花式AI应用...
- (2015年度)黑龙江测绘地理信息局青年学术和技术带头人考评与增选公示
- python猫狗大战代码_猫狗大战
- jsp怎样写一个Button onclick事件
- socket是什么意思
- console使用方法介绍
- matlab代码:面向全局搜索的自适应领导者樽海鞘群算法
- 时序收敛以及 synplify 技巧timing constraint
热门文章
- ServiceLoader的使用
- docker-ce 配置初始化后服务启动报错
- 一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。...
- Java关键字——instanceof
- angular2-swiper幻灯片模块使用方法
- ubuntu无限卡在logo界面
- PowerShell-Exchange:统计每天邮件收发
- 信息化监理公司的所有问题归到底是人的使用和管理
- mysql正在加载_本地坏境或者服务器环境下phpmyadmin出现始终正在加载问题的解决方法...
- 电流环差分信号传送数字信号