函数

代码的复用:写一遍多次使用》把特定的功能语句打包放在一起

语法:function 名字(0,1,1多个参数){

                      执行的语句 }

返回值return,把语句返回给函数

例子:

function add(x,y){
var z=x+y;
return z;
}

var rs=add(12);
console.log(“1+2=”+rs);

动态参数

function add(){
      var z=0forvar i=0;i<arguments.length;i++){
      z + = arguments[i];}

      return z
}
var rs=add (1,2,4,5,23);
console.log("1+2 4,5,23= "rs);

rs=add(3,4);
console.log("3+4= "+rs);

 

作用域:可访问变量的集合(对象、函数)

我们定义了一个变量,这个变量可以被使用的地府,可以使用的范围

var a=10;

全局作用域>全局变量>在函数外定义的变量>在所有地方都能被访问

局部作用域>局部变量>在函数里面的变量>函数里面被访问到

function add(){
y=100;//不设置var y=100的局部变量只设定y=100的时候 系统自动默认全 
                                                                                          局变量
console.log("add():y="+y);
}

add();
console.log("全局y="+y);

 

预解析:浏览器在获得JS文件的时候,不是立刻去执行代码,全篇快速扫描一遍

               把变量预先解析

               变量  把变量的声明提前  例如

console.log("x= "+x);
var x=10;
add();//函数也是变量
function add(){
console.log("add()");}
顺序不同也可以正常显示

但是如果在函数内部的全局变量加载顺序在console.log后面 会报错。所以注意顺序

 

闭包:变量的 私有化问题

<script type="text/javascript">//简化写法 函数声明和立即执行放在一起。

        var plus=(function() {
            var counter = 0;

            return function () {
                counter++;
                console.log("counter=" + counter);
            }

        })( );
        plus();
        plus();
        plus();
        console.log(counter);

 

对象

变量var

函数function:一对语句的集合

对象:一对变量+一堆函数的集合

var  boj1={X:0,y:1,z:function(){console.log(“”“”);}}}

属性:  名字:   值。

名字:string:    隐式转化为string

x123-> 可以不加引号 

如果包含了特殊字符->必须加引号 例如“first name”:“cc”

如果函数构造大体相同还可以创建类

例如var person2=new person();

 

对象:属性的基本操作: 增加  删除  修改属性值  查询获取属性的值  遍历;

查询获取属性的   点. []   例子

var name = person1.name;->“xiaoming”只能用没有双引号的名称 

name=person["name"];

name="xiaoming"

修改

person1["name"]="xiaoming2";

person1.name="xiaoming2";

增加:修改属性的时候,如果对象里面没有这条属性,自动加上

person1.height=170;

删除

delete person1.name

遍历:

for(var 属性名 in person1){

console.log("名"+pN);}

 

 

引用、自定义类

//定义了对象

//var person1 = {

      name:"xiaoming",

      sex:"male",

      age:"19",

      slogen:function(){

      console.log("w s x m");}}

//xiaohong 对象 人
//用类的形式创建对象
//人的类:class
//      var person2=new PersonClass();
//ES5 是 function -》ES6更新成class   F需要加() C不需要加()
//为了区分函数和类 类
function PersonClass(pName,pSex,pAge){
this.name="pName";
this.sex="pSex";
this.age="pAge"
this.slogan=function(){
console.log("w s"+this.name);}
}
//构造函数方式
var person1=new PersonClass("xiaoming","male","18");
var person2=new PersonClass("xiaohong","femle","15");

 

命名空间:多个人命名自己的创建的变量

var cc={};    cc.Age=100; cc可以是dd可以是ee,自己创建的

 

系统提供很多类->用的方法

//对象  类   自定义类

//对象和类

//对象var obj1={}    //var obj2=new Object();//空的对象 这两个创建的是同样的空对象

对象:值+方法

Object->打包  最底层  类

值     万物都是对象+值+方法:类型转换

数字123 ->对象   类型   Number

字符串“abc”      String

布尔值true   false  Boolean

转换例子:  var n1=123;var str1=n1.toString();更多的自己查属性词典

 

//时间相关;Date()

//计算代码的性能:耗时

var time1=new Date();//获取了当前的时间 本地电脑的时间

for(var i=0;<1000000;i++){

        t++;}

 var time2=new Date();

var n=time2.getTime()-time1.getTime();

 

*****Math  -》 数学相关 Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。您无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。

随机数

Math.random()

 

DOM弹窗(浏览器的弹窗)

同步:阻断

alert()弹窗直接弹出

confirm()boolean类型弹窗,确定为ture 取消为false 例子如下

//var bcf=confirm(“confirm弹窗”);

//console.log("点击:"+baf)

//if(bcf){提交}else

prompt()

//var strpt=prompt(“prompt 输入:”,“默认是CC”);

console.log(“填了:”+strpt);

 

浏览器的导航栏的信息

//window.location 对象

//属性:url的各个部分

//location.href;

//location.toString()

//刷新页面,打开新的页面 例子:

//var bcf=confirm("confirm弹窗");

//if(bcf){location.replace(“http://www.baidu.com/”)}

//else location.reload();

 

浏览器的历史记录:前进 后退

history

浏览器的信息:版本 厂家

navigator

 

//计时器

循环执行:var sil=setInterval(函数名,时间);意识是每隔多少时间执行一次函数

        停掉:clearInterval(sil);

一次执行:var sil=setTimeout(函数名,时间);

                  clearTimeout(sil);

例子  var   num=0;

function add(){

console.log("num="+ ++num);}

var sil = setInterval(add,1000);

function end(){

console.log("setTimeout  clearInterval");

clearInterval(sil);}

setTimeout(end,10000);

 

Dom  - > 文档对象模型

Dom树:

                 html文件 -》 人 - 》网页的数据

                 浏览器 -》 数据结构 - 》方便 查找 修改 遍历

                 样子 - 》 树

                 DOM树

数据结构:

线性:单链表  循环列表  队列  栈  数组

树形: 二叉树  平衡树  红黑树

网状:有向图 无向图   - 》寻路算法  A*算法

DOM树

document 节点:只有一个

标签节点 元素节点:

文本节点:

 

标签节点 元素节点: 样子 样式 

找到这些节点

3中最常用的方法:

1通过ID来查找

2通过标签名来查找

3通过class来查找

 

//  ID-》唯一性:

         var  p1  = document.getElementById("p1");

// JS时间线

           var  ps     =      document.getElementsByTagName("p1");//返回数组

           var  p1     =      ps[ 0 ];节点

 

var ps = documentgetElementsByClassName("txt");//返回数组

ps【0】节点

 

******三个方法的区别:

1 ID -》节点

            Tag(标签)Class  -》数组

1.1   id-》document.getElementById只能用document来获取

            Tag   Class-》在标签任意节点上使用 

 

创建节点,添加到DOM树  删除节点

 var div1   =      document.getElementsByTagName("div1");

//创建一个标签

 var p1   =      document.createElement("p");创建标签类节点

//创建一个文本节点

var ptxt = document.creatTextNode("p1");创建文本类节点

p.appendChild(p1txt);需要添加的节点

//添加节点

div1.appenChild(p);父节点

//删除节点

removeChild(); 

例子删除div2

var div2 = document.getElementById("div2");

div1.removeChild(div2); 

同样也可以用父节点元素进行删除操作

div2.parentNode.removeChild(div2);

 

对节点的属性 内容

html定义好的属性    用点   .    对象的点  获取  修改

var img1 = document.getElementById("img1");

img1.id 通过获取img1  可以进行加. 进行修改

 

//class   因为在JS中是关键词    类  所以要用className地台

//img1.className=

 

//CSS样式的修改 在style后面可以加·在加属性进行修改

例如:img1.style.width=“100px”

 

//获取属性  修改自己创建的例如ID属性

img1.getAttribute("dat");

getAttribute()

ing1.setAttribute("dat(属性的名字)","1(属性的值)") 

 

常用的操作属性:

getAttribute("")    setAttribute("")    removeAttribute("")

 

更改节点中文字或者其他 例如<p id="p1">  p1  </p>中的p1文字   里面可以添加任何东西 也可以加超文本链接等等

var p1 = document.getElementById("p1");

p1.inner(ID=P1标签内的所有内容)HTML(代表格式) = "这是innerHTML";

如果想单纯添加文字内容用   textContent

 

什么是事件:

JS-》交互  人可以去操作界面

js -》 事件驱动的方式

用户-》操作html元素-》产生一个事件-》事件 主动的调用 设定 方法 函数

事件源:产生事件的地方

事件的类型:点击 键盘

事件对象:记录好 信息

事件的处理程序:函数

两种方式:

1 html的属性:

属性名:on+时间的名字 onclick

属性值:方法

            直接在html设定

            通过js的元素对象来设定

点击事件例子:

var num =0;

function add(){

console.log("点击:"+  ++num);}

var div1 = docume.getelemengtById(“div1”);

div1.onclick=add;

也可以删除 div1.onclick=null;

2 通过调用 系统提供的方法

div1.addEventlistener(事件类型click,函数add,事件的处理方式可以不屑类型是布尔类型)

 

//事件函数:发生的时候-》操作 function

var div1 = document.getElementById("div1");

div1.addEventlistener("click",add);

事件对象 event:提供了事件的详细信息;

具体发生事件的元素,鼠标的位置,点击的状态,键盘的按键

function add(event){

          console.log("事件函数");}

// var e = event || window.event; // IE8采用的方法

          console.log(event);

//想要取消默认打开的超链接页面

event.preventDefault(); 用对象方法时用这个

//return false;用on来绑定事件函数的时候 用这个

}

var a1=document.getElementById("a1");

a1.addEventListener(“click”,add);

//用绑定方法也可以替代上两行代码。取消默认方法时return false;

a1.onclick=add;

上述js代码相对应的Html代码是
<body>
<div id = "div1">div1</div>
      <input type="text" name="a" id="input1">
      <script src="19.js"></script>
      <a herf="http:www.baidu.com" target="_blank" id="a1">
              百度</a>
</body>

 

事件的传播:

多个标签,相互嵌套的,点击页面的时候,点击事件

是不是被点中的标签才会发生点击时间(在html文件中 div2的父元素是div1)

var div1 = document getElementById("div1");

var div1 = document getElementById("div2");

 

div1.addEventListener("click",div1click);

div1.addEventListener("click",div2click);

 

function div1Click(){console.log(“div1  click”)};

function div1Click(){console.log(“div2  click”)};

事件的传播:

在默认的情况下,点击页面的一个标签,处在传播路径上的标签都会监听到对应的事件

传播路径:就是dom树的分层结构图。结构下的都可以获取到

 

事件流:对应标签接受到事件的顺序

               两大阶段:

                                捕获阶段:从起始点》目标阶段

                                冒泡阶段:目标位置》起始位置

例如head1.addEventListener(“click”,head1Click,事件的传播,false or true)

false》head1Click  对应的函数会在冒泡阶段执行

ture》 head1Click  对应的函数会在捕获阶段执行

H5文件
<head><style>
#div1{ width:200px;height:200px;background:green;}
#div2{margin-left:200px; width:100px;height:100px;background:red;}</style></head>
<body>
<div id="div1">div1<div id="div2">div2</div></div>
<script src="20.js"></script>
<ul>
<li>li1</li>
<li>li2</li>
<li>li3</li>
<li>li4</li>
<li>li5</li>
</ul>
</body>

JS文件
var div1 = document getElementById("div1");

var div1 = document getElementById("div2");


//捕获阶段
div1.addEventListener("click",div1clicktrue,true);

div1.addEventListener("click",div2clicktrue,true);



function div1Clicktrue(){console.log(“捕获阶段 div1  click”)};

function div1Clicktrue(){console.log(“捕获阶段 div2  click”)};
//冒泡阶段
var div1 = document getElementById("div1");

var div1 = document getElementById("div2");



div1.addEventListener("click",div1click,false);

div1.addEventListener("click",div2click,false);



function div1Click(){console.log(“冒泡阶段 div1  click”)};

function div1Click(){console.log(“冒泡阶段 div2  click”)};

//冒泡阶段事件代理利用冒泡流程机制
var ul1=document.getElementsByTagName("ul")[0];
ul1.addEventListener("click",ulClick);
function ulClick(event){
          console.log(event.target);}