ES5-JS学习

答:
在JS里的全局环境就是一个对象,这个对象也是JS运行的根,对浏览器中的JS,这个对象就是window对象。对全局JS语句来说,window对象就相当于当前作用域。
当声明对象时,加上var,则表示是window(或者父级对象)的一个变量,而不加var,则表示是window的一个属性。对于全局的js语句来说,两者没太多区别,而在函数内,则有点不同:
变量是有作用域的(作用域外不可以调用),而属性则可以在函数内外都可以改变(全局都可以调用)。
二、scoping是什么?hoisting是什么? var fn = function () {...} 和 function fn () {...} 有什么不同?什么时候使用哪种方式?
答:scoping是js语句的作用域,在js中,不存在块级作用域,只有函数级作用域。hoisting是函数提升机制,在函数声明时,分为函数表达式和函数声明表达式,只有函数声明式能被提升,函数声明式如:function fn(){}。函数表达式如:var fn=function(){}。当页面加载时,会先编译并执行声明式函数,而表达式函数只会编译,等调用的时候才会执行。使用时,根据是否需要执行来判断运用何种函数。

三、'use strict'产生的效果是什么?
use strict是js的一种运行模式:严格模式。和正常模式不同,js语法更加严格、安全。具体特性如下:
1、禁止使用with语句,因为with在编译的时候无法确定属性到底归属哪个对象。
2、正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。
3、禁止this关键字指向全局对象
等等

四、this关键字详解
1.this对象的涵义就是指向当前对象中的属性和方法。
2.this指向的可变性。当在全局作用域时,this指向全局;当在某个对象中使用this时,this指向该对象;当把某个对象的方法赋值给另外一个对象时,this会指向后一个对象。
3.this的使用场合有:在全局环境中使用;在构造函数中使用,在对象的方法中使用。
4.this的使用注意点,最重要的一点就是要避免多层嵌套使用this对象。



五、bind(), call(), apply() 是什么?什么时候使用?解决什么问题?
call/apply/bind方法的来源:这三个方法其实都是继承自Function.prototype中的,属于实例方法。
1 console.log(Function.prototype.hasOwnProperty('call')) //true2 console.log(Function.prototype.hasOwnProperty('apply')) //true3 console.log(Function.prototype.hasOwnProperty('bind')) //true
上面代码中,都返回了true,表明三种方法都是继承自Function.prototype的。当然,普通的对象,函数,数组都继承了Function.prototype对象中的三个方法,所以这三个方法都可以在对象,数组,函数中使用。
bind()方法是将某个函数绑定到某个对象上,而call和apply方法则可以看作是某个对象上的方法,通过调用方法的形式来间接调用函数。如下例子:
var zlw = { name: "zlw", sayHello: function (age) { console.log("hello, i am ", this.name + " " + age " years old"); }};var xlj = { name: "xlj",};zlw.sayHello(24);
调用方式:
zlw.sayHello.call(xlj, 24);// hello, i am xlj 24 years oldzlw.sayHello.apply(xlj, [24]);// hello, i am xlj 24 years old
zlw.sayHello.bind(xlj)(24); //hello, i am xlj 24 years old zlw.sayHello.bind(xlj)([24]); //hello, i am xlj 24 years old
bind方法还可以这样写  fn.bind(obj, arg1)(arg2)  。
bind() 方法和前两者不同在于:bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同。
这三个方法的作用都是改变函数的执行上下文!通俗点就是说来切换/固定this的指向。


六、Array.prototype.reduce() 什么时候使用?解决什么问题?-
reduce(function(a,b){},initialValue)
第一个参数为回调方法,第二个参数为初始值。
回调函数也有两个参数,第一个为上一次回调函数返回的结果(第一次则为初始值),第二个参数为数组中的下一个值。
在没有传入初始值的时候,回调函数执行数组长度减一。
有传入值,则执行数组长度。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值