刷脸支付 底层架构 aircrack-ng SLAM matplotlib asynchronous bitmap vue部署 vue前端框架 jq触发点击事件 mysql分页查询sql语句 js教程文档 bootstrap滚动条 python字典get python编程教程 python怎么调用函数 python编程工具 python传参 java正则表达式 java函数 java开发环境搭建 java如何使用 html实例教程 乱码查看器 java分布式开发 音频录制软件 制作字幕的软件 beatedit pdf拆分工具 剑三醉猿 矩阵分析与应用 cf透视辅助 苹果手机总是自动重启 VSPD 办公室复印机使用方法 经典雅黑 文件分割 dns劫持怎么解决 接口自动化测试框架 主播音效
当前位置: 首页 > 学习教程  > 编程语言

JavaScript(复习)-声明

2020/8/11 20:01:13 文章标签:

JavaScript(复习)-声明

变量声明

var声明一个变量,可选初始化一个值,在function中声明一个局部变量,function外声明一个全局变量

let声明一个块作用域的局部变量,可选初始化一个值。

const声明一个块作用域的只读常量。

使用关键词 var 。例如 var x = 42。这个语法可以用来声明局部变量和全局变量。
直接赋值。例如x = 42。使用这种形式赋值,会产生一个全局变量。在严格模式下会产生错误。因此你不应该使用这种方式来声明变量。
使用关键词 let 。例如 let y = 13。这个语法可以用来声明块作用域的局部变量。

变量求值

varlet 语句声明的变量,如果没有赋初始值,则其值为 undefined

如果访问一个未声明的变量会导致抛出一个引用错误ReferenceError异常。

undefined在数值环境中值会被转换为NaN、在布尔环境中会被当做false,可以用x === undefined来判断变量是否被赋值。

如果一个变量值为null,空值 null 在数值类型环境中会被当作0来对待,而布尔类型环境中会被当作 false

变量的作用域

在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问。
ECMAScript 6 之前的 JavaScript 没有语句块作用域;相反,语句块中声明的变量将成为语句块所在函数(或全局作用域)的局部变量。例如,如下的代码将在控制台输出 5,因为 x 的作用域是声明了 x 的那个函数(或全局范围),而不是 if 语句块。

if (true) {
  var x = 5;
}
console.log(x); // 5

如果使用 ECMAScript 6 中的 let 声明,上述行为将发生变化。

if (true) {
  let y = 5;
}
console.log(y); // ReferenceError: y 没有被声明

变量提升

JavaScript 变量的另一个不同寻常的地方是,你可以先使用变量稍后再声明变量而不会引发异常。这一概念称为变量提升;JavaScript 变量感觉上是被“提升”或移到了函数或语句的最前面。但是,提升后的变量将返回 undefined值。因此在使用或引用某个变量之后进行声明和初始化操作,这个被提升的变量仍将返回 undefined值。

console.log(x === undefined); //true
var x = 3;

上面的例子也可以写作

var x;
console.log(x);
x = 3;

由于存在变量提升,一个函数中所有的var语句应尽可能地放在接近函数顶部的地方。这个习惯将大大提升代码的清晰度。
在 ECMAScript 6 中,letconst)将不会提升变量到代码块的顶部。因此,在变量声明之前引用这个变量,将抛出引用错误ReferenceError。这个变量将从代码块一开始的时候就处在一个“暂时性死区”,直到这个变量被声明为止。

console.log(x); // ReferenceError
let x = 3;

函数提升

对于函数来说,只有函数声明会被提升到顶部,而函数表达式不会被提升。**
**

// 函数声明
foo(); // foo
function foo() { 
    console.log('foo');
}

// 函数表达式声明
baz(); // TypeError:baz is not a function
var baz = function(){
    console.log('baz');

全局变量

全局变量是全局对象的属性。在网页中,(译注:缺省的)全局对象是 window ,所以你可以用形如 window.variable的语法来设置和访问全局变量。因此,你可以通过指定 windowframe的名字,在当前 windowframe访问另一个 windowframe中声明的变量。例如,在文档里声明一个叫 phoneNumber 的变量,那么你就可以在子框架里使用 parent.phoneNumber 的方式来引用它。

常量

你可以用关键字 const 创建一个只读的常量。常量标识符的命名规则和变量相同:必须以字母、下划线(_)或美元符号($)开头并可以包含有字母、数字或下划线。

const PI = 3.14;

常量不可以通过重新赋值改变其值,也不可以在代码运行时重新声明。它必须被初始化为某个值。

常量的作用域规则与 let 块级作用域变量相同。若省略const关键字,则该标识符将被视为变量。

在同一作用域中,不能使用与变量名或函数名相同的名字来命名常量。例如:

// 这会造成错误
function f() {};
const f = 5;

// 这也会造成错误
function f() {
  const g = 5;
  var g;
  //语句
}

然而,对象属性被赋值为常量是不受保护的,所以下面的语句执行时不会产生错误。

const MY_OBJECT = {"key": "value"};
MY_OBJECT.key = "otherValue";

同样的,数组的被定义为常量也是不受保护的,所以下面的语句执行时也不会产生错误。

const MY_ARRAY = ['HTML','CSS'];
MY_ARRAY.push('JAVASCRIPT');
console.log(MY_ARRAY); //logs ['HTML','CSS','JAVASCRIPT'];

本文链接: http://www.dtmao.cc/news_show_100275.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?