js


 

 

 

js引擎:js解释器,为浏览器的一部分,没有单一的“JS引擎”;每个浏览器都有自己的引擎
 

作用域 — 可以从中访问变量的“区域”。

词法作用域— 在词法阶段的作用域,换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的,因此当词法分析器处理代码时会保持作用域不变。

块作用域 — 由花括号{}创建的范围

作用域链 — 函数可以上升到它的外部环境(词法上)来搜索一个变量,它可以一直向上查找,直到它到达全局作用域。

同步 — 一次执行一件事, “同步”引擎一次只执行一行,JavaScript是同步的。

异步 — 同时做多个事,JS通过浏览器API模拟异步行为

事件循环(Event Loop) - 浏览器API完成函数调用的过程,将回调函数推送到回调队列(callback queue),然后当堆栈为空时,它将回调函数推送到调用堆栈。

堆栈 —一种数据结构,只能将元素推入并弹出顶部元素。 想想堆叠一个字形的塔楼; 你不能删除中间块,后进先出。

堆 — 变量存储在内存中。

调用堆栈 — 函数调用的队列,它实现了堆栈数据类型,这意味着一次可以运行一个函数。 调用函数将其推入堆栈并从函数返回将其弹出堆栈。

执行上下文 — 当函数放入到调用堆栈时由JS创建的环境。

闭包 — 当在另一个函数内创建一个函数时,它“记住”它在以后调用时创建的环境。

垃圾收集 — 当内存中的变量被自动删除时,因为它不再使用,引擎要处理掉它。

变量的提升— 当变量内存没有赋值时会被提升到全局的顶部并设置为undefined

this —由JavaScript为每个新的执行上下文自动创建的变量/关键字。

=document.querySelector(".b")
create_text_p=document.createTextNode("<p></p>")
create_p=document.createElement("p")
a.appendChild(create_text_p)
a.appendChild(create_p)
a.insertBefore(create_text_p,a.childNodes[0])
 
b=document.querySelectorAll(".b")
create_text_p=document.createTextNode("<p></p>")
b[0].appendChild(create_text_p)
 
appendChild参数必须是一个Node 对象,不能是字符串
a.insertBefore(create_text_p,a.childNodes[0])  第一个参数是一个节点对象,第二个参数规定插入的位置
 
document.getElementById("myList").replaceChild(newnode,oldnode);  //newnode,oldnode均为节点对象
 
item.removeChild(item.childNodes[0])  参数为对象
 
 
 
a=document.getElementsByClassName("pre")
console.log(a[0].lastChild)  获取pre下最后一个子节点,包括文本节点
console.log(a[0].firstChild)  获取pre下第一个子节点,包括文本节点
console.log(a[0].childNodes)  获取pre下所有子节点,包括文本节点。
console.log(a[0].children)  获取pre下所有子节点,不包括文本节点。

  

数组
array,splice()  //参数一为下标开始,参数二为删除的个数,参数三为插入到被删除位置的数据,返回被删除的元素,在原数组修改
array,slice()  //参数一为下标开始,参数二为下标结束,返回截取的数组 ,不在原数组修改
 
  innerHTML
 innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML。
 
 
获取元素dom
 
console.log("getElementsByClassName",document.getElementsByClassName("child"))
console.log("getElementById",document.getElementById("id"))      
console.log("getElementsByTagName",document.getElementsByTagName("div" )) console.log("getElementsByName",document.getElementsByName("one")) console.log(document.querySelector("div")) console.log(document.querySelectorAll("div"))

  

 

ECMAScript中重载的定义

重载:就是根据参数,选择相同函数名而参数不同的函数

ECMAScript第二个函数覆盖了第一个函数,不具备重载的功能
 
 

arguments 对象(函数参数的集合)

 
 
function box(){
return arguments[0]+arguments[1]+arguments[2];
}
alert(box('haha','dianshi'),99);

  

 

JavaScript 程序

计算机程序是由计算机“执行”的一系列“指令”。

在编程语言中,这些编程指令被称为语句。

JavaScript 程序就是一系列的编程语句。

注释:在 HTML 中,JavaScript 程序由 web 浏览器执行。

 

 

var a,b,c

a=b=c=1

 

 

浏览器提示框

<script>
window.alert(5 + 6);
</script>

 

浏览器控制台
<script>
console.log(5 + 6);
</script>

 

字面量 :源代码中直接代表某个常数值的一种表达形式,又2称混合值,可以是数字,字符串等

数字字面量:

字符串字面量:“ll”

数组字面量 数字var arr = [1,2,3];

正则表达式字面量 var reg = /[a-z]/g;

对象字面量:{}

 

 

变量:源代码中可变的表示法 

构造器函数:new Object()

 

 ----------------
    constructor
  ----------------
  举个栗子:
  var Student = function() {
    this.name = 'default';
    this.say = function() {
      console.log('say hello!');
    }
  }
  这里的say方法放在构造函数的内部是不妥的。对于可以重用的成员,建议放在原型链上,主要是因为它一直保存在内存中。
  所以可以改为:
  Student.prototype.say = function() {
    console.log('say hello!');
  }

  如果我们创建实例的时候,丢失new呢?
  var s1 = Student();
  console.log(window.name); //"default"

  缺少new关键字之后,对于Student内部的this便指向了全局对象。这是很糟糕的一件事。
  这也是为什么规定构造函数的首字符大写的原因。



去new
  ---------------
    去掉new关键字
  ---------------
  function People() {
    if(!(this instanceof People)) {
      return new People();
    }

    this.name = "default";
  }

  我们还可以通过arguments.callee完成同样的效果,不过在ES5的"use strict"模式下被禁用了。

 

posted @ 2019-11-25 20:29  知一以天  阅读(282)  评论(0编辑  收藏  举报