JavaScript 学习笔记1

第一章    JavaScript简介javascript

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

注:c++

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

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

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

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

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

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

第二章 设计

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.变量提高如何解决

相关文章
相关标签/搜索