Javascript 变量、函数的声明
javascript变量
全局变量和局部变量
按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量。全局变量的作用域是整个js文件,而局部变量的作用域是该变量被定义的函数内部,也包括在该函数内部定义的函数的内部。其实无论是全局变量还是局部变量,他们都是在其被创建的环境(比如函数)中,以及被创建的环境所包含的子环境(比如函数内部的函数)中有效。
块作用域
变量的作用域是基于函数的,而不是基于块的。在c++中,在花括号 { }中声明的变量,在花括号外不可见,这就是块作用域;而在javascript中,花括号内部声明的局部变量,在花括号外仍可见。
function f1(){
if(1){
var a = 100;
}
alert(a);
}
f1(); // alert 100
变量和函数的声明
在javascript引擎解析javascript代码的时候,首先javascript引擎会把变量和函数的声明提前进行预解析,然后再去执行其他代码。
变量的声明
变量的声明只有一种方式,就是用var关键字声明,直接赋值不是一种声明方式!它仅仅是在全局对象上创建了新的属性(而不是变量)。
var num = 1; 是在当前域中声明变量,如果在方法中声明,则为局部变量;如果是在全局域中声明,则为全局变量。
而num=1;
是对属性赋值的操作,首先,它会尝试在当前作用域链中解析num,如果在当前作用域链中找到num,则会执行对num属性赋值;如果没有找到num,它会在上一层作用域链中找....
直到找到最上层的作用域,即全局作用域,此时它会在全局作用域中创造num属性并赋值。
由于变量声明自带不可删除属性,比如var num=1 和 num = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,可以从全局变量中删除。
声明和赋值的区别
(1)声明会在解释器预解析js代码的时候被提前,而赋值不会。
alert(a); // undefined ,被声明提前,但此刻未被赋值
alert(b); // error "b" is not defined
b = 10;
var a = 20;
(2)直接赋值形式是在执行阶段创建
alert(a); // undefined
b = 10;
alert(b); // 10, 代码执行阶段创建 var a = 20;
alert(a); // 20, 代码执行阶段修改
(3)变量不能被删除,属性可以
a = 10;
alert(window.a); // 10,是一个全局对象window的属性
alert(delete a); // true
alert(window.a); // undefined
var b = 20;
alert(window.b); // 20
alert(delete b); // false
alert(window.b); // 仍然为 20,因为变量是不能够删除的。
函数声明
函数声明有三种方式:
(1)function name(){} 直接创建
function add(a,b){
return a+b;
}
add(5,4);
(2)new Function 构建函数创建
var add=new Function("a", "b", "return a+b;");
add(4,5);
(3)给变量赋值匿名函数方法创建
var add = function(a,b){
return a+b;
}
add(4,5);
其中,第二种和第三种方法,在声明前访问时,返回的都是一个undefined的变量。在声明后访问他们都是一个function的函数。
如果变量名和函数名声明相同,函数优先声明
alert(x); // function
var x = 10;
alert(x); // 10
x = 20;
function x() {};
alert(x); // 20
Javascript 变量、函数的声明的更多相关文章
- JavaScript 变量作用域和声明提升
一.变量作用域 说到这个概念,不有自主的想到this,scope 这两个关键字. JavaScript的this总是指向一个明确的对象,这个对象是在执行的时候动态绑定的.通俗的说就是谁调用我,我的th ...
- JavaScript基础函数的声明(014)
1.函数的重要地位 函数(functions)在JavaScript里有着重要的地位,其原因有二: 它们是一种特殊的对象 它们提供作用域 说函数在JavaScript里是特殊的对象,因为: 程序的执行 ...
- 【JavaScript高级进阶】JavaScript变量/函数提升的细节总结
// 测试1 console.log('----------test1--------------'); console.log(global); // undefined var global = ...
- var与Javascript变量隐式声明
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它.var x = "XX"; y ="xxx ...
- 声明(创建) JavaScript 变量
在 JavaScript 中创建变量通常称为"声明"变量. 我们使用 var 关键词来声明变量: var carname; 变量声明之后,该变量是空的(它没有值). 如需向变量赋值 ...
- JavaScript 变量
一,JavaScript 变量(存储信息的容器) 与代数一样,JavaScript 变量可用于存放值(比如 x=2)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描 ...
- 谈谈javascript的函数作用域
在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取 ...
- day133:2RenMJ:TypeScript的变量&函数&类&接口
目录 1.变量 2.函数 3.类 4.接口 1.变量 1.变量的声明 // 1.即指定数据类型 也指定值 var 变量名:类型 = 值; eg:var username:string = " ...
- PHP函数(四)-变量函数
变量函数 将声明的函数的函数名赋给一个变量,通过该变量来调用函数 <?php function Calculate($a,$b){ return $a + $b; } echo "计算 ...
- 7.JavaScript变量
VAR声明变量,一条语句可以声明多个变量 var name="Gates", age=56, job="CEO"; Value = undefined 在计算机 ...
随机推荐
- GMA Round 1 三视图
传送门 三视图 该几何体如图所示,是一个边长为$2\sqrt{3}$的正四面体,高是$h=2\sqrt{2}$,内切球半径是$r=\frac{h}{4}=\frac{\sqrt{2}}{2}$,则体积 ...
- 论YUV422(YUYV)与YUV420相互转换
Example 2.13. V4L2_PIX_FMT_YUYV 4 × 4 pixelimage start + 0: Y'00 Cb00 Y'01 Cr00 Y'02 Cb01 Y'03 Cr01 ...
- CSS魔法堂:改变单选框颜色就这么吹毛求疵!
前言 是否曾经被业务提出"能改改这个单选框的颜色吧!让它和主题颜色搭配一下吧!",然后苦于原生不支持换颜色,最后被迫自己手撸一个凑合使用.若抛开input[type=radio] ...
- 微信小程序 --- Cannot read property 'setData' of null 解决
在外部定义一个为 this 的 that
- Mysql查询特定值是哪些表哪些字段
摘自网上 -- 查询整个数据库中某个特定值所在的表和字段的方法 # flush tables; -- 创建表来存储查询结果 drop table if exists tmp_table; CREATE ...
- webpack 配置缓存
1.输出文件的文件名 加hash 2.提取引导模板 3.模块标识符 https://webpack.docschina.org/guides/caching/#src/components/Sideb ...
- 【Docker江湖】之docker部署与理解
转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thi ...
- Win10一直弹出 用户账户控制 解决
目录 问题 解决方法一 将appwiz.cpl加入UAC白名单 解决方法二 问题 自从更新了Windows后,就出现了一个问题,隔一段时间就弹出一次下面的对话框,而且如果时间稍长,会弹出多个. 解决方 ...
- go微服务框架go-micro深度学习(四) rpc方法调用过程详解
上一篇帖子go微服务框架go-micro深度学习(三) Registry服务的注册和发现详细解释了go-micro是如何做服务注册和发现在,服务端注册server信息,client获取server的地 ...
- MATLAB 统计不同区间中元素的个数
使用 find 命令: x = :;%生成数组 k = find( x > & x < );%查找大于2小于5的元素的数组下标 size(k,) %统计的元素的个数