前言
最近在读《JavaScript高级程序设计》,留下一下笔记。
一、什么是JavaScript
JavaScript是一门用来与网页交互的脚本语言,包含一下三个组成部分。
- ECMAScript:由ECMA-262定义并提供核心功能。
- 文档对象模型(DOM):提供与网页内容交互的方法和接口。
- 浏览器对象模型(BOM):提供与浏览器交互的方法和接口。
二、语言基础
1、严格模式
ECMAScript5增加了严格模式(strict mode)的概念。严格模式是一种不同的JavaScript解析和执行模式,ECMAScript3的一些不规范写法在这种模式下会被处理,对于不安全的活动将抛出错误。要对整个脚本启用严格模式,在脚本开头加上这一行:
"use strict";
虽然看起来像个没有赋值给任何变量的字符串,但它其实是一个预处理指令。任何支持JavaScript的引擎看到它都会切换到严格模式。选择这种语法形式的目的是不破坏ECMAScript3语法。
也可以单独指定一个函数在严格模式下执行,只要把这个预处理指令放到函数体开头即可:
function doSomething() {
"use strict";
// 函数体
}
严格模式会影响JavaScript执行的很多方面。所用现代浏览器都支持严格模式。
2、变量声明(var关键字、let声明、const声明)
ECMAScript变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存任意值的命名占位符。有三个关键字可以声明变量:var、const和let。其中,var在ECMAScript的所有版本中都可以使用,而const和let只能在ECMAScript6及更晚的版本中使用。
1. var声明作用域
使用var操作符定义的变量会成为包含它的函数的局部变量。比如,使用var在一个函数内部定义一个变量,就意味着该变量将在函数退出的时候被销毁:
function test() {
var str = "hello world!"; // 局部变量
}
test();
console.log(str); // 报错!
这里str变量是在函数内部使用var定义的。函数叫test(),调用它会创建这个变量并给它赋值。调用之后变量随即被销毁,因此示例中的最后一行会导致报错。不过,在函数内定义变量时省略var操作符,可以创建一个全局变量:
function test() {
str = "hello world!"; // 全局变量
}
test();
console.log(str)