jsp语法注意事项tips

1.let和var在for循环等语句块中作用域的区别

(var)

由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的:

'use strict';

functionfoo(){

for(vari=0; i<100; i++) {//}   

 i +=100;// 仍然可以引用变量i}

(let)

用let替代var可以申明一个块级作用域的变量:

'use strict';

functionfoo()

{varsum =0;

for(leti=0; i<100; i++) {        sum += i;    }// SyntaxError:

i +=1;}

(const)

ES6标准引入了新的关键字const来定义常量,const与let都具有块级作用域:

'use strict';

constPI =3.14;

PI =3;// 某些浏览器不报错,但是无效果!

PI;// 3.14

2.方法中this的使用

2.1 标准用法,this直接调用

var xiaoming = { 

   name:'小明', 

   birth:1990, 

   age:function(){

      var y =newDate().getFullYear();

      return y -this.birth; }};

xiaoming.age ;    //          function xiaoming.age()

xiaoming.age();  //       今年调用是25,明年调用就变成26了

绑定到对象上的函数称为方法,和普通函数也没啥区别,但是它在内部使用了一个this关键字,这个东东是什么?

在一个方法内部,this是一个特殊变量,它始终指向当前对象,也就是xiaoming这个变量。所以,this.birth可以拿到xiaoming的birth属性。

2.2 apply进行变量和方法绑定

虽然在一个独立的函数调用中,根据是否是strict模式,this指向undefined或window,不过,我们还是可以控制this的指向的!

要指定函数的this指向哪个对象,可以用函数本身的apply方法,它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。

用apply修复getAge()调用:

function getAge( ) {

    var y =newDate().getFullYear();

    return y -this.birth;}      //最后一行代码将this绑定到xiaoming变量

var xiaoming = {    

    name:'小明',    

    birth:1990,   

    age: getAge};

xiaoming.age();// 25

getAge.apply(xiaoming, []);         // 25, this指向xiaoming, 参数为空

2.3 引入一个that参数

'use strict';

var xiaoming = { 

     name:'小明', 

     birth:1990, 

     age:function(){

         var that =this;// 在方法内部一开始就捕获this

         function getAgeFromBirth(){

              var y =newDate().getFullYear();

              return  y - that.birth;// 用that而不是this}

        return  getAgeFromBirth(); }};

   xiaoming.age();// 25

你可能感兴趣的:(jsp语法注意事项tips)