声明(创建) JavaScript 变量

在 JavaScript 中创建变量通常称为"声明"变量。

一、我们使用 var 关键词来声明变量:

var carname;

变量声明之后,该变量是空的,其值实际上是 undefined。

如需向变量赋值,请使用等号:

carname="Volvo";

不过,您也可以在声明变量时对其赋值:

var carname="Volvo";
当使用var声明一个变量时,创建的这个属性是不可配置的,也就是说无法通过delete运算符删除
二、也可使用let声明,let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。在Function中局部变量推荐使用let变量,避免变量名冲突。let 声明的变量只在其声明的块或子块中可用,这一点,与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数。
function varTest() {
    var x = 1;
    if (true) {
        var x = 2; // 同样的变量!
        console.log(x); // 2
    }
    console.log(x); // 2
} function letTest() {
    let x = 1;
    if (true) {
        let x = 2; // 不同的变量
        console.log(x); // 2
    }
    console.log(x); // 1
}

重新声明 JavaScript 变量

如果重新声明 JavaScript 变量,该变量的值不会丢失:

在以下两条语句执行后,变量 carname 的值依然是 "Volvo":

var carname="Volvo";
var carname;

变量的解析

名字解析顺序

javascript中一个名字(name)以四种方式进入作用域(scope),其优先级顺序如下:
1、语言内置:所有的作用域中都有 this 和 arguments 关键字
2、形式参数:函数的参数在函数作用域中都是有效的
3、函数声明:形如function foo() {}
4、变量声明:形如var bar;

名字声明的优先级如上所示,也就是说如果一个变量的名字与函数的名字相同,那么函数的名字会覆盖变量的名字,无论其在代码中的顺序如何。但名字的初始化却是按其在代码中书写的顺序进行的,不受以上优先级的影响

变量的作用域

javascript是没有块级作用域的函数是JavaScript中唯一拥有自身作用域的结构。

var v = "hello";
if(true){
  console.log(v);
  var v = "world";
}
输出结果为:hello
修改如下:

var v = "hello";
(function(){
  console.log(v);
  var v = "world";
})();
输出结果为:undefined。因为在function作用域内,变量v的声明被提升了

Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。

例一:

<script type="text/javascript">
var scope="global";  
function t(){  
    var scope;
    console.log(scope);  
    scope="local";
    console.log(scope);  
}  
t();
console.log(scope);
</script>

输出结果为:

总结:var声明的变量在函数内部属于局部变量,不会改变全局变量的值。

如果改为:

<script type="text/javascript">
var scope="global";  
function t(){
    console.log(scope);  
    scope="local";
    console.log(scope);  
}  
t();
console.log(scope);
</script>

那么输出结果变为:

总结:没有用var声明的变量都是全局变量,而且是顶层对象的属性。(变量提升只是声明提升,赋值不会提升)

JavaScript之变量(声明、解析、作用域)的更多相关文章

  1. javascript变量声明 及作用域

    javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...

  2. 【转】javascript变量声明 及作用域

    javascript变量声明提升(hoisting) javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面. 先看 ...

  3. javascript变量声明及作用域总结

    javascript变量声明及作用域总结 一.总结 一句话总结:还是得好好看书,光看视频是不得行的,浅学无用,要相互印证,要真正理解才有用,比如<Javascript权威指南> 书 1.j ...

  4. 浅谈javascript函数,变量声明及作用域

    javascript函数跟变量的声明.作用域这些概念网上都已经讲烂了. 这里写个博客,也相当于做个笔记. 变量声明 首先看个例子: var globalVar = "gv"; fu ...

  5. JavaScript中变量声明有var和没var的区别

    JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (functi ...

  6. JavaScript 基础 (变量声明, 数据类型, 控制语句)

    创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...

  7. javascript的变量声明、数据类型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. javascript的变量声明和数据类型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. javascript 变量声明 和 作用域

    变量的声明 1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面. 先看一下下面的例子: (function(){ alert(b)//b is not def ...

  10. JavaScript的变量预解析特性

    JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢?事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了解到,J ...

随机推荐

  1. wordpress怎么用AMP加速器呢

    AMP项目(Accelerated Mobile Pages)是一个开放源代码计划,旨在为所有人打造更好的网络体验.借助该项目,用户可以打造出在各种设备和分发平台上都能始终如一地快速加载且效果出色的精 ...

  2. 06-cmake语法-include

    用来载入CMakeLists.txt文件,也用于载入预定义的cmake模块. include(cmake/OpenCVMinDepVersions.cmake) .cmake 是一个文本,定义了一个模 ...

  3. 访问阿里云 vue项目的 127.0.0.1:+ip

    vue 127.0.0.1 将  localhost 改为 0.0.0.0 原理看下面链接 参考: https://www.cnblogs.com/sddai/p/9281189.html

  4. Scrapy笔记07- 内置服务

    Scrapy笔记07- 内置服务 Scrapy使用Python内置的的日志系统来记录事件日志. 日志配置 LOG_ENABLED = true LOG_ENCODING = "utf-8&q ...

  5. A9G开发

    巨坑 不支持联通 发短信 上电,准备好后使用 结束标志 取消换行  以16进制发  0x1a 实际测试 中间可以有很多行内容 短信内容结束换行 最后必须以 16进制 发送 0x1a  带和不带换行都可 ...

  6. 【DP】【P5615】 [MtOI2019] 时间跳跃

    Description 给定 \(n\) 条边,第 \(i\) 条边的长度为 \(i\),每条边都有 \(50\%\) 的概率被选择,求如果选出的边能组成一个平面凸多边形,则方案的权值是方案中边的数量 ...

  7. svn Server authz 配置示例(文件夹权限配置)

    [aliases] [groups] admin = jiangzhehao technology = chenlei,liulei,xunzheng,qiaomingjie sales = chen ...

  8. uname 命令简介

    [root@localhost root]# uname --help Usage: uname [OPTION]... Print certain system information. With ...

  9. 基于web公交查询系统---搭建mvc连接数据库(我的毕业设计,进度继续)

    建立一个spring的项目:我在已经做过的项目基础下做的,所以接口连接数据库挺快. 搭建好的.对应好数据库: 前几天进度已经完成简单的设计: 完成登录,用户管理(修改删除). 继续的数据库的信息获取, ...

  10. Shell脚本之三 传递参数

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推-- 实例 向脚本传递三个参数,并分 ...