关于$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;
}));

为什么会交叉打印出国军2阿扁2办证2?
如果把那个函数的代码格式拿出来分析,我发现报错了
自执行函数写法不是 (function(){})(); 吗?为什么在老师写的代码,也能成功执行?
1回答
好帮手慕粉
2020-01-19
同学你好,关于同学的问题解答如下:
1、$0是正则所有的属性,在正则中使用才会生效,不在正则中使用就只是一个普通的变量名而已,因为并未对$0进行定义,所以直接打印$0会报undefined的错。
2、这里的函数不是定义, 是作为参数传递给replace方法的,replace里面的function是一个回调函数,一个每次匹配都要调用的回调函数。所以在str调用replace方法的时候,由于replace是js提供给我们的函数,它的内部进行了处理, 会自动执行传入的函数。同学不用了解replace函数内部做了什么处理, 只需要将这种方式看作是固定的语法去使用即可。
3、控制台输出是正则表达式匹配的结果,当str开始匹配正则时,$0就匹配到了“国军”,就会往下执行,打印$0的长度,所以就是交叉打印出国军2:

4、自执行函数是(function(){})();老师的并不是自执行函数,在第2点中已经解释。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
相似问题