您的位置:首页 > Web前端 > JavaScript

JavaScript 学习笔记1

2016-10-15 23:26 302 查看
第一章 JavaScript简介

JavaScript实现组成部分:ECMAscript,BOM,DOM

注:

1.ECMAScript是宿主环境中脚本语言的国际 Web 标准 ,规范定义了一种脚本语言实现应该包含的内容。

Web浏览器只是ECMA实现可能的宿主环境之一。

JavaScript作为一种嵌入HTML文档的、基于对象的脚本设计语言,是ECMA的一种实现。

2.DOM:文档对象模型的缩写,是一种与浏览器、平台、语言的接口,使得我们可以访问页面其他的标准组件。

3.BOM:由以一系列相关的对象组成,提供了独立于内容而与浏览器窗口进行交互的对象。描述了与浏览器进行交互的方法和接口,可以对浏览器窗口进行访问和操作,譬如可以弹出新的窗口,改变状态栏中的文本,对Cookie的支持。

一些网站会在您的计算机上的以小文本文件存储信息。这种文件称为 Cookie。

第二章

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.变量提升如何解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: