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 变量、函数的声明的更多相关文章

  1. JavaScript 变量作用域和声明提升

    一.变量作用域 说到这个概念,不有自主的想到this,scope 这两个关键字. JavaScript的this总是指向一个明确的对象,这个对象是在执行的时候动态绑定的.通俗的说就是谁调用我,我的th ...

  2. JavaScript基础函数的声明(014)

    1.函数的重要地位 函数(functions)在JavaScript里有着重要的地位,其原因有二: 它们是一种特殊的对象 它们提供作用域 说函数在JavaScript里是特殊的对象,因为: 程序的执行 ...

  3. 【JavaScript高级进阶】JavaScript变量/函数提升的细节总结

    // 测试1 console.log('----------test1--------------'); console.log(global); // undefined var global = ...

  4. var与Javascript变量隐式声明

    在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它.var x = "XX"; y ="xxx ...

  5. 声明(创建) JavaScript 变量

    在 JavaScript 中创建变量通常称为"声明"变量. 我们使用 var 关键词来声明变量: var carname; 变量声明之后,该变量是空的(它没有值). 如需向变量赋值 ...

  6. JavaScript 变量

    一,JavaScript 变量(存储信息的容器) 与代数一样,JavaScript 变量可用于存放值(比如 x=2)和表达式(比如 z=x+y). 变量可以使用短名称(比如 x 和 y),也可以使用描 ...

  7. 谈谈javascript的函数作用域

    在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域.取 ...

  8. day133:2RenMJ:TypeScript的变量&函数&类&接口

    目录 1.变量 2.函数 3.类 4.接口 1.变量 1.变量的声明 // 1.即指定数据类型 也指定值 var 变量名:类型 = 值; eg:var username:string = " ...

  9. PHP函数(四)-变量函数

    变量函数 将声明的函数的函数名赋给一个变量,通过该变量来调用函数 <?php function Calculate($a,$b){ return $a + $b; } echo "计算 ...

  10. 7.JavaScript变量

    VAR声明变量,一条语句可以声明多个变量 var name="Gates", age=56, job="CEO"; Value = undefined 在计算机 ...

随机推荐

  1. quick Cocos 2dx 学习网站

    http://quick.cocoachina.com/wiki/doku.php?id=zh_cn http://www.cocoachina.com/ http://www.cocoachina. ...

  2. mysql:Cannot proceed because system tables used by Event Scheduler were found damaged at server start

    mysql 5.7.18 sqlyog访问数据库,查看表数据时,出现 Cannot proceed because system tables used by Event Scheduler were ...

  3. python之流程控制与运算符

    第一:流程控制 一:if条件语句 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 单分支语句: 单分支,单个条件 age = 20 if age >= 18: print('you ...

  4. 问题9:tabtle 整理

    合并“行”单元格: <th colspan="2">Telephone</th> 合并“列”单元格: <th rowspan="2" ...

  5. C#修改文件名方法

    static void Main(string[] args) { string srcFileName = @"c:\order.txt"; string destFileNam ...

  6. Android SDK版本号 与 API Level 对应关系

    转自:https://blog.csdn.net/qiaoquan3/article/details/70185550 Android SDK版本号 与 API Level 对应关系   新接触And ...

  7. 最课程阶段大作业06:U度节能平台控制系统

    除了互联网项目,当今社会还有一个概念非常流行,那就是:物联网.什么是物联网?物联网是通过传感设备,按约定的协议,把任意物品与互联网相连接,进行信息交换和通信,以实现智能化识别.定位.跟踪.监控和管理的 ...

  8. QPS从0到4000请求每秒,谈达达后台架构演化之路(转载)

    https://blog.csdn.net/czbing308722240/article/details/52350219 QPS从0到4000请求每秒,谈达达后台架构演化之路   达达是全国领先的 ...

  9. 解决windows 下 mysql命令行导入备份文件 查询时乱码的问题

    Mysql导入乱码,一般在命令行会遇到.下面说的是命令行的情况下解决乱码问题: 方法一: 通过增加参数 –default-character-set = utf8 解决乱码问题 mysql -uroo ...

  10. ero-configuration Web Application Debugging with Xdebug and PhpStorm

    1. Install Xdebug To use Xdebug with PhpStorm for debugging PHP applications, you need to have a PHP ...