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.变量提升如何解决
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.变量提升如何解决
相关文章推荐
- javascript基础学习笔记1
- seaJs学习笔记之javascript的冲突问题
- JavaScript 学习笔记— —闭包(一)
- JavaScript 学习笔记— —闭包(二)
- javascript 函数声明和函数表达式的区别(学习笔记)
- javaScript学习笔记(与c++等不同之处)
- javascript学习笔记(三)BOM和DOM详解
- JavaScript学习笔记-第一章
- JavaScript学习笔记 - 进阶篇(7)- 浏览器对象
- JavaScript高级程序设计学习笔记--事件(二)(事件对象--DOM中的事件对象/IE中的事件对象/跨浏览器的事件对象)
- JavaScript学习笔记之正则表达式
- JavaScript 学习笔记
- JavaScript 学习笔记 五 数组
- JavaScript学习笔记(四):JS浏览器BOM
- JavaScript 学习笔记十二 函数式编程风格
- JavaScript for Kids 学习笔记15. 贪吃蛇
- 再起航,我的学习笔记之JavaScript设计模式20(策略模式)
- javascript cookie学习笔记javascript
- JavaScript事件学习笔记
- JavaScript 学习笔记— —cookie