关于$1 和 匿名函数的问题

来源:3-42 String对象中与正则相关的方法之replace

Warsun

2020-01-18 19:17:29

    var str = "中国军队和阿扁一起办证";
    var pattern = /国军|阿扁|办证/g;
    console.log($0);//为什么放在这里会报错?$0是本身就有的属性吗?
    console.log(str.replace(pattern,function($0){//这里这个function是自执行函数吗?
      console.log($0);
      console.log($0.length)
      var result = "";
      for(var i=0; i<$0.length; i++){
        result+="*";
      }
      return result;
    }));

上面代码注释是我的问题,还有一些搞不明白的如下:

    var str = "中国军队和阿扁一起办证";
    var pattern = /国军|阿扁|办证/g;
    console.log(str.replace(pattern,function($0){
      console.log($0);
      console.log($0.length);//这里加了一行这个代码,然后控制台输出的很奇怪
      var result = "";
      for(var i=0; i<$0.length; i++){
        result+="*";
      }
      return result;
    }));


http://img.mukewang.com/climg/5e22e79c09001a7703710175.jpg

为什么会交叉打印出国军2阿扁2办证2?

如果把那个函数的代码格式拿出来分析,我发现报错了http://img.mukewang.com/climg/5e22e8c9099960ae06260190.jpg

自执行函数写法不是  (function(){})();  吗?为什么在老师写的代码,也能成功执行?

写回答

1回答

好帮手慕粉

2020-01-19

同学你好,关于同学的问题解答如下:

1、$0是正则所有的属性,在正则中使用才会生效,不在正则中使用就只是一个普通的变量名而已,因为并未对$0进行定义,所以直接打印$0会报undefined的错。

2、这里的函数不是定义, 是作为参数传递给replace方法的,replace里面的function是一个回调函数,一个每次匹配都要调用的回调函数。所以在str调用replace方法的时候,由于replace是js提供给我们的函数,它的内部进行了处理, 会自动执行传入的函数。同学不用了解replace函数内部做了什么处理, 只需要将这种方式看作是固定的语法去使用即可。

3、控制台输出是正则表达式匹配的结果,当str开始匹配正则时,$0就匹配到了“国军”,就会往下执行,打印$0的长度,所以就是交叉打印出国军2:

http://img.mukewang.com/climg/5e23bbe709af736a13080337.jpg

4、自执行函数是(function(){})();老师的并不是自执行函数,在第2点中已经解释。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

0

0 学习 · 14456 问题

查看课程