JavaScript中变量和函数声明的提升
现象:
1.在JavaScript中变量和函数的声明会提升到最顶部执行。
2.函数的提升高于变量的提升。
3.函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找。
4.匿名函数不会提升。
5.不同<script>块中的函数互不影响。
例子:
函数声明提升高于变量声明
//同时声明变量a和函数a
var a;
function a() {}
alert(typeof a); //显示的是"function",初步证明function的优先级高于var。 //先声明函数后声明变量,证明上边的例子不是function覆盖了变量
function a() {}
var a;
alert(typeof a); //显示的仍是"function",而不是"undefined",即function的优先级高于var。 //声明了变量的同时赋值
function a() {}
var a = 1;
alert(typeof a); //number,此时不是function了。
//说明:"var a=1"相当于"var a;a=1",即先声明,后赋值,"a=1"相当于把a重新赋值了,自然就是number!
函数内部用var定义了和外部相同的变量,函数将不再向上找外部的变量
var value = 'hello';
function show() {
alert(value);
if (!value) {
var value = 'function';
}
alert(value);
}
show() //此处调用函数依次弹出 "undefined", "function" //上例相当于
var value = 'hello';
function show() {
var value; //注意这行
alert(value);
if (!value) {
value = 'function'; //这行去掉var
}
alert(value);
}
show()
//1.如果上列中show内部定义value未用var,则会用到外部的变量,弹出"hello", "hello"。
//2.如果函数内部未定义value,也能获取到外部的value值。
匿名函数不会向上提升
getName()
var getName = function () {
alert('closule')
}
function getName() {
alert('function')
}
getName() //上边的代码相当于
function getName() { //函数向上提升
alert('function')
}
getName()
var getName = function () {
alert('closule')
}
getName() //代码执行分别弹出 "function", "closule"
不同<script>块中的函数互不影响
<script>
getName()
var getName = function () {
alert('closule')
}
<script>
<script>
function getName() {
alert('function')
}
<script> //代码执行报错:TypeError: getName is not a function
//因为第一个<script>块中getName()函数未定义,匿名函数又不会向上提升
JavaScript中变量和函数声明的提升的更多相关文章
- 关于javascript中变量及函数的提升
javascript中变量以及函数的提升,在我们平时的项目中其实还是挺常用的,尤其是大型项目中,不知不觉就会顺手添加一些变量,而有时候自己的不小心就会酿成一些不必要错误,趁有时间整理一下自己对于js中 ...
- js变量和函数声明的提升(转)
原文:http://zha-zi.iteye.com/blog/2037026 下面的程序是什么结果? var foo = 1; function bar() { if (!foo) { var fo ...
- js变量和函数声明的提升
函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 请注意,变量赋值并没有被提升,只是声明被提升了. 函数的声明比变量的声明具有高的优先级. 下面的程序是什么结果? var foo = ...
- 1.JS中变量的重新声明和提升
重新声明 1.允许在程序的任何位置使用 var 重新声明 JavaScript 变量: 实例 var x = 10; // 现在,x 为 10 var x = 6; // 现在,x 为 6 2.在相同 ...
- Javascript 函数声明先提升还是变量先提升
大家都知道js 分为词法阶段 和执行阶段 也知道它是因为var变量和函数声明会提升 但是你知道他们两个谁先提升的吗 测试一下 function test(){ alert(4); } var test ...
- JavaScript 中对变量和函数声明提前的演示样例
如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...
- JS中的提升(即变量和函数声明移动到代码顶部)
先看代码(第一个代码片段): console.log(a); var a = 1; 如果你认为这是一段不合法的代码,在调用console.log()的时候会输出undefined,你完全正确.但是如果 ...
- JavaScript中变量提升------Hoisting
原谅链接:http://www.cnblogs.com/damonlan/archive/2012/07/01/2553425.html 因为这个问题很是经典,而且容易出错,所以在介绍一次.哈哈.莫怪 ...
- js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域
js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...
随机推荐
- 树分治 点分治poj 2114
存在2点间距离==k 输出AYE 否则输出NAY #include<stdio.h> #include<string.h> #include<algorithm> ...
- <UL>中<li>标签前编号图片的简单调用
<style type="text/css"> ul li{ list-style-type:none} .men ul{ background:url(http:// ...
- 自定义View完全解析
自定义View主要包括以下3种方式: 一.组合控件,利用已有控件的组合,来满足自己的需求. 例子:顶部导航栏 二.继承已有View,比如继承TextView.ImageView等,根据需要重写相应的方 ...
- wamp 中如何管理两个dedeCms站点
本文以WampServer2.1为例,图文说明开启wamp虚拟主机功能,也就是绑定多域名,开启多站点搭建功能. 1. 我们一键安装wamp到E盘,并可以正常启动,状态如下图所示:
- js-JavaScript高级程序设计学习笔记18
第21章 AJAX 4.跨域源资源共享 CORS跨域源资源共享,其背后思想,是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否应该成功. 1.IE对CORS的实现 在IE8中引 ...
- Ubuntu下matlab快捷键设置
ubuntu15.04, matlab2016a 默认按键ctrl+s无法保存,ctrl+z无法撤销.因为用的是emacs的快捷键.emacs的快捷键不熟悉会觉得很复杂,果断改为windows风格的: ...
- 09-FZ6R 白色
- 帝国cms栏目自定义字段首页调用
例如:增加栏目自定义字段:chushi_bpic 用下面的灵动标签和调用: [e:loop={"select C.classid,C.classname,C.classimg,D.chush ...
- 基本概率分布Basic Concept of Probability Distributions 3: Geometric Distribution
PDF version PMF Suppose that independent trials, each having a probability $p$, $0 < p < 1$, o ...
- TypeScript Class(类)
传统的JavaScript注重用函数和基于原型的继承来创建可复用的组件,但这可能让用习惯面对对象方式的程序员感到棘手,因为他们的继承和创建对象都是由类而来的.从JavaScript的下一个版本,ECM ...