js-ecma

ECMA基础知识回顾

js的基础含义

javascript : script脚本语言,继承在浏览器中的一种语言

js分为三大模块:

① ECMA核心语法 主要内容有 语法,类型,语句,关键字,保留字,操作符,对象…………几乎没有兼容问题 担任解析器的角色 处理我们的逻辑代码

② DOM 英文全称 Document(文档) Object(对象) Model(模型) 借助DOM.APL可以轻松自如的删除,添加,替换和修改任何节点 文档对象模型;文档指的就是网页;把网页变成一个JS可以操作的对象;给了JS可以操作页面元素的能力;document;有一些兼容性问题;

③ BOM 浏览器对象模型;仅用来作用于窗口的指令,给了JS操作浏览器的能力;window;有许多兼容性问题

1、js的引入方法

外部引入<script type="text/javascript" src="路径"></script>

此种方法用在body的里面,标签的最后,主要是因为html文档是解释执行,从上往下。有效避免在JS文件里节点取不到,这跟引用框架JS文件一般放在head里的原理如出一辙

内部引入<script> ……include statements …… </script> (不常用)
标签内使用:(不常用)

2、script标签元素

属性:src type defer async

    src 和 type 只是在引入时用到

    noscript用来判断浏览器是否支持 js 或者是否禁用 js

    defer 延迟属性只对外部引用的js有效果,含义为立即加载js,但是文档加载完成之前不执行。

    async属性 只对外部引入的js有效果,异步加载js没有顺序可言( 不推荐 )

3、语法和标识符

① 完全对大小写敏感,所以一定要区分大小写————驼峰式命名

② 标识符 指变量,函数,属性,或参数的名字

4、有特定作用的关键字不能作为标识符,也有一部分保留字尽量不要作为标识符!

5、变量

var message // var 是关键字,用来声明和保存变量用的

变量: 用来保存信息和数据的,声明的变量没有初始化,那么该变量的默认值是undefined

        变量是有作用域的,var声明的变量是局部变量,没有var声明的叫全局变量。

6、js最大的特点

单线程运行

7、获取节点:

document.getElementById("")

document.getElementByTagName("") 支持IE678及标准浏览器还有移动端,不太好用,

document.getElementByClassName("")不支持IE678 至少IE9以上

document.querySelector("")

document.querySelectorAll("") //不支持IE678 仅支持标准浏览器和移动端,性能好

8、数据类型:

① String 字符串类型

② Boolean 布尔类型

③ Number 数字类型

④ Null 空类型

⑤ Undefined undefined空类型

数组超出长度后返回undefined

当函数没有返回值时的默认返回值是undefined

变量声明未定义时 其值为undefined

⑥ Object 对象类型 值为对象或空 null

1、数据类型的检测 typeof

2、Array object null function 的关系和区别

3、什么是函数,参数,属性

4、函数和对象的关系

只有函数才可能定义块级作用域 或称为局部作用域

声明函数使用function关键字+函数名声明的函数

function text(){

}

声明函数 就是使用function关键字 有函数名 没有赋值给一个函数

函数表达式 就是使用function关键字 没有函数名 赋值给一个变量的函数

匿名函数 就是使用function关键字 但是没有函数名的函数 也没有赋值给一个变量 用来保护变量,因为作用域不一样,全局变量和局部变量不冲突!用来赋给事件,作为事件触发的

var i = function(){
    此种写法称为函数表达式
}

一个是声明变量(函数) 一个是匿名函数 函数表达式

三者的区别

function text(){
    var j = function(){
        console.log('123')
    } //()这样表示立即执行
    function(){
        console.log('456')
    } //()这样会报错 ,仔细比较两者的区别
}

text();

函数表达式可以使用()操作符立即执行;函数声明不可以

var j = function(){
     console.log(‘哈哈哈’);
}

也可以(function(){}这个括号用来把函数变成一个函数表达式)(立即调用)//这样的调用方法简写成()();

全局变量可以在任何地方访问

函数内的变量,对外部是不可见的

函数内部可以访问外部函数的变量

    (function(num){
        var i = num
        function aaa(){
            console.log(i);
        }                                内部函数可以访问上层函数的变量
        console.log(i);
        aaa();
    })(2);

    for(var i = 0 ; i< 10 ; i++){
        (function(i){
            function aaa(){
                console.log(i);
            }
        })(i);
    }

举例:

<!doctype html>
<html>
<head lang = "en">
    <meta charset="utf-8"/>
    <title>逻辑与规则</title>
    <link rel="stylesheet" type="text/css" href="css/js99.css"/>
</head>
<body>
    <ul>
        <li>0</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
        <li>7</li>
        <li>8</li>
        <li>9</li>
    </ul>
    <script type="text/javascript" src="js/js99.js"></script>
</body>
</html>

相关javascript代码

var arr = document.querySelectorAll("ul li");
for (var i = 0; i < arr.length; i++) {
    (function(i){
        arr[i].onclick = function(){
            console.log(i);
        }
    })(i)
};

其结果等同于下面js代码

var arr = document.querySelectorAll("ul li");
for (var i = 0; i < arr.length; i++) {
        arr[i].index=i ;
        arr[i].onclick = function(){
            console.log(this.index);
        }
};

1、javascript预解析和作用域

2、执行运算符()的运用

3、return的用法 函数参数的解析

全局

function fn(){
    console.log('111')
}
console.log(fn()); 运行结果:111,undefined 每一个函数都有一个默认返回值undefined

最后利用今天所学知识做了一个关于计算加减乘除的方法:(如下)

function computer(){

    var lth = arguments.length-1 ;

    //console.log(lth);

    if (arguments[lth]=='+') {

        for (var i = 1 ; i < arguments.length-1 ; i++) {

            arguments[0] += arguments[i] ;

        }

        console.log(arguments[0]);

    }else if( arguments[lth] == '-'){

        for (var i = 1; i < arguments.length-1; i++) {

            arguments[0] -= arguments[i] ;

        }

        console.log(arguments[0]);

    }else if (arguments[lth] == '*') {

        for (var i = 1; i < arguments.length-1 ; i++) {

            arguments[0] *= arguments[i] ;

        }
        console.log(arguments[0]);

    }else if (



    arguments[lth] == '/') {

        for (var i = 1; i < arguments.length-1 ; i++) {

            arguments[0] /= arguments[i] ;

        }

        console.log(arguments[0]);

    }

}

computer(1,2,3,5,6,8,'+');

computer(15,2,2,3,5,3,'-');

computer(2,5,2,5,2,5,'*');

computer(200,2,2,5,'/');