JS方面重点摘要(一)

1、获取样式
(1)style只能获取到行间样式的属性
(2)火狐getComputedStyle(obj,null)[attr],IE:obj.currentStyle[attr]

2、ready、onload区别:
(1)ready 事件的触发,表示文档结构已经加载完成(不包含图片等非文字媒体文件),执行时机要早于onload
(2)onload 事件的触发,表示页面包含图片等文件在内的所有元素都加载完成。

3、闭包概念:
(1)如何从函数外部读取局部变量?——在函数内部再定义一个函数,再return该函数。
(2)JS允许使用内部函数(函数定义和函数表达式)位于另一个函数的函数体内,且这些内部函数可以访问它们所在外部函数中声明的所有局部变量、参数和其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
(3)读取函数内部的局部变量;让变量的值始终保存在内存中。
(4)闭包微观的理解:定义的时候确定作用域链,执行时候确定执行环境,创建活动对象,为活动对象添加arguments属性、和形参、函数引用。
(5)定义和执行:函数作用域是在定义函数的时候确定的,而不是执行函数的时候。
(6)JS垃圾回收机制:如果一个对象不再被引用,会被回收;如果两个对象互相引用,而不再被第3者所引用,则这两个互相引用的对象也会被回收。

(7)静态封装环境,即模拟静态私有变量

4、变量作用域
(1)作用域链查找规则
(2)没有块级作用域
(3)变量声明会提前,赋值不会提前
(4)不使用var都是全局变量,全局变量都是window的属性

5、(1)函数自执行里面可以当做块级作用域

(2)通过私有作用域隐藏私有变量,而且不需要实例化。

6、html字符串转为jQuery对象;jQuery对象与dom对象互转。

7、引用传递和值传递
(1)基本数据类型和引用数据类型
(2)在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址(与C语言一样),在栈中的这个特殊的变量就变成了数组或者对象的引用变量。栈中的变量指向堆内存中的变量,这就是 Java 中的指针。引用变量实际上就是指向堆内存里内容的指针。
(3)修改引用变量,被引用的对象也会修改。若不想同时修改,就B.prototype[i] = createObject.prototype[i]这样循环开辟新的内存空间。

8、(1)this指向机制:在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用括号()的左边是引用类型的值,this将设为引用类型值的base对象,在其他情况下(与引用类型不同的任何其它属性),这个值为null。不过,实际不存在this的值为null的情况,因为当this的值为null的时候,其值会被隐式转换为全局对象。

(2)构造函数中的this新创建的对象实例

9、定时器的工作机制:循环执行过程中,几乎同时设置了5个定时器,一般情况下,这些定时器都会在1秒之后触发,而循环完的输出是立即执行的。

10、深浅拷贝问题:
(1)利用数组方法concat()/slice()可以实现数组的浅拷贝

  如果concat的数组都是基本类型,那么返回的副本互不影响;如果包含引用类型,那么就是浅拷贝

(2)简单粗暴实现数组深拷贝的方法:先JSON.stringify(),在JSON.parse()

  var new_arr = JSON.parse( JSON.stringify(arr) );new_arr[3][0] = 'new';

  改变new_arr就不会对原来有影响。

(3)浅拷贝的实现:遍历对象,然后把属性和属性值放入一个新对象(只拷贝对象,判断是数组还是对象、hasOwnProperty())
(4)深拷贝的实现:在拷贝的时候判断属性值类型,如果是对象,就递归调用深拷贝函数

(5)深拷贝函数原生js实现

11、循环事件绑定方法
(1)采用闭包(node(i)和i当变量传)
(2)采用新增索引值(node(i).index = i,把i值赋予新加的变量,然后this.index获取)
(3)ES6块级作用域变量声明let
(4)采用new关键字
(5)forEach()方法

12、原型的应用
Object.create(obj);//返回一个对象,其原型为参数obj对象。
var b=Object.create(a),b没有的属性就从原型a上去找,b有的属性就取自己的属性

13、new创建对象发生的事情(四步):
(1)创建一个对象实例
(2)将构造函数作用域赋值给新对象(因此this指向该新对象)
(3)执行构造函数代码(该执行指的是为这个新对象添加属性)
(4)返回新生成的对象实例
有return的函数在new时对this的影响(正常的构造函数是没有return语句):如果return的是一个对象,那么this会指向返回的对象,如果return的不是一个对象或null(null是特例),那么this还是指向函数的实例。

(5)如果函数中的this被不包含子对象的对象所调用,那么this指向的就是调用它的对象。如果函数中的this被包含多级对象的对象调用,this指向的也只是它上一级的对象

 

14、事件冒泡
(1)阻止事件冒泡的方式(return false;event.stopPropagation())、
阻止默认事件的方式(return false;event.preventDefault())
(2)冒泡机制:3种
(3)不能冒泡的事件:blur、focus、load、unload等

15、事件代理和事件委托
(1)利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件
(2)事件捕获、事件目标、事件冒泡机制理解
(3)当用事件委托的时候,根本就不需要去遍历元素的子节点,只需要给父级元素添加事件就好了,其他的都是在js里面的执行,这样可以大大的减少dom操作,这才是事件委托的精髓所在。
window.event、ev.target、ev.srcElement、target.nodeName(兼容性)

16、JSON
(1)判断字符串是否是json字符串方法:try/catch、JSON.parse()成功、字符串包含{
(2)语法规则:键名必须使用双引号。json的本质是一个字符串
(3)stringify()、toJSON()、parse()

  过滤器和函数参数

  还原函数的注意事项

17、for循环里的ajax问题
(1)设置async:false改为同步
(2)在异步返回的回调函数里递归调用

18、判断数据类型
(1)typeof val === "number" 有问题(因为typeof NaN === "number"),所以需要加上 && isFinite(val)
(2)布尔型、string型、undefined,直接用typeof
(3)对象类型,需要排除null和undefined
(4)null直接判断===即可
(5)数组类型typeof为object,所以不能判断
一种:Object.prototype.toString.apply(arr)==='[object Array]'
二种:排除null和undefined,然后arr.constructor === Array

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值