第一章 JavaScript简介javascript
JavaScript实现组成部分:ECMAscript,BOM,DOMjava
注:c++
1.ECMAScript是宿主环境中脚本语言的国际 Web 标准 ,规范定义了一种脚本语言实现应该包含的内容。浏览器
Web浏览器只是ECMA实现可能的宿主环境之一。async
JavaScript做为一种嵌入HTML文档的、基于对象的脚本设计语言,是ECMA的一种实现。函数
2.DOM:文档对象模型的缩写,是一种与浏览器、平台、语言的接口,使得咱们能够访问页面其余的标准组件。网站
3.BOM:由以一系列相关的对象组成,提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,能够对浏览器窗口进行访问和操做,譬如能够弹出新的窗口,改变状态栏中的文本,对Cookie的支持。this
一些网站会在您的计算机上的以小文本文件存储信息。这种文件称为 Cookie。spa
第二章 设计
2.1script元素
type属性:一直使用的都是text/javascript
使用<script>元素的方式:直接在页面中嵌入JavaScript代码和包含外部Javascript文件
(注:第一种需指定script的type属性;第二种还需制定src属性,值为指向外部JavaScript文件的连接)
2.2script位置
通常把所有JavaScript引用放在<body>元素中页面内容的后面。
2.3
defer属性:延迟脚本,在执行脚本时不会影响页面的构造
async:当即下载脚本
变量提高问题hoisting
Javascript的做用域
C家族的语言有块做用域,当程序控制走进一个块,好比if块,只做用于该块的变量能够被声明,而不会影响块外面的做用域。
javascript是函数做用域。这是和c家族语言最大的不一样。该程序里面的if并不会建立新的做用域。即变量定义的做用域并非离其最近的封闭语句或代码块,而是包含它们的函数。
eg:
c++:
#include <stdio.h>
int main() {
int x = 1;
printf("%d, ", x); // 1
if (1) {
int x = 2;
printf("%d, ", x); // 2
}
printf("%d\n", x); // 1
}
js:
var x = 1;
console.log(x); // 1
if (true) {
var x = 2;
console.log(x); // 2
}
console.log(x); // 2
1.变量提高是什么
函数声明和变量声明老是会被解释器悄悄地被“提高”到方法体的最顶部。
请注意,变量赋值并无被提高,只是声明被提高了。
eg:
function foo() {
bar();
var x = 1;
}
函数声明:只有函数式的声明才会连同函数体一块儿被提高。
function test() {
foo(); // TypeError "foo is not a function"
bar(); // "this will run!"
var foo = function () { // 变量指向函数表达式
alert("this won't run!");
}
function bar() { // 函数声明 函数名为bar
alert("this will run!");
}
}
test(); //两种函数声明方式,仅有foo被提高
2.变量提高会形成的问题
变量声明提高也可能致使变量重声明的混淆。在同一函数中屡次声明相同变量是合法的。这在写多个循环时会常常出现。
3.变量提高如何解决