第二周作业(字符串方法、作用域、闭包)

字符串方法总结

  • length 属性返回字符串的长度
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var sln = txt.length;
/*
sln=26
*/
  • indexOf() 方法返回字符串中指定文本首次出现的索引(位置)
var str = "The full name of China is the People's Republic of China.";
var pos = str.indexOf("China");
  • lastIndexOf() 方法返回指定文本在字符串中最后一次出现的索引
var str = "The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China");
  • lastIndexOf() 方法向后进行检索(从尾到头),这意味着:假如第二个参数是 50,则从位置 50 开始检索,直到字符串的起点。
var str = "The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China", 50);
  • search() 方法搜索特定值的字符串,并返回匹配的位置:
var str = "The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China", 50);
  • slice() 提取字符串的某个部分并在新字符串中返回被提取的部分。
var str = "Apple, Banana, Mango";
var res = str.slice(7,13);
/*
如果某个参数为负,则从字符串的结尾开始计数。
这个例子裁剪字符串中位置 -12 到位置 -6 的片段
*/
var str = "Apple, Banana, Mango";
var res = str.slice(-13,-7);
/*
res=="Banana"
*/
  • substring() 类似于 slice()。
    不同之处在于 substring() 无法接受负的索引。
var str = "Apple, Banana, Mango";
var res = str.substring(7,13);
  • substr() 类似于 slice()。
    不同之处在于第二个参数规定被提取部分的长度。
var str = "Apple, Banana, Mango";
var res = str.substr(7,6);
  • replace() 方法用另一个值替换在字符串中指定的值,replace() 方法不会改变调用它的字符串。它返回的是新字符串。
    默认地,replace() 只替换首个匹配且replace() 对大小写敏感。
str = "Please visit Microsoft!";
var n = str.replace("Microsoft", "W3School");
/*
如需执行大小写不敏感的替换,请使用正则表达式 /i(大小写不敏感)
*/
str = "Please visit Microsoft!";
var n = str.replace(/MICROSOFT/i, "W3School");
/*
如需替换所有匹配,请使用正则表达式的 g 标志(用于全局搜索)
*/
str = "Please visit Microsoft and Microsoft!";
var n = str.replace(/Microsoft/g, "W3School");
  • toUpperCase() 把字符串转换为大写:
var text1 = "Hello World!";       // 字符串
var text2 = text1.toUpperCase();  // text2 是被转换为大写的 text1
  • toLowerCase() 把字符串转换为小写:
var text1 = "Hello World!";       // 字符串
var text2 = text1.toLowerCase();  // text2 是被转换为小写的 text1
  • concat() 连接两个或多个字符串,concat() 方法可用于代替加运算符
var text1 = "Hello";
var text2 = "World";
text3 = text1.concat(" ",text2)
  • trim() 方法删除字符串两端的空白符:
var str = "       Hello World!        ";
alert(str.trim());
  • charAt() 方法返回字符串中指定下标(位置)的字符串:
var str = "HELLO WORLD";
str.charAt(0);            // 返回 H
  • charCodeAt() 方法返回字符串中指定索引的字符 unicode 编码
 var str = "HELLO WORLD";
str.charCodeAt(0);         // 返回 72
  • split() 将字符串转换为数组:
var txt = "a,b,c,d,e";   // 字符串
txt.split(",");          // 用逗号分隔
txt.split(" ");          // 用空格分隔
txt.split("|");          // 用竖线分隔

作用域

变量作用域分为两种:全局作用域和局部作用域

  • 全局作用域:最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的。
<script>
      var outerVar = "outer";
      function fn(){
         console.log(outerVar);
      }
      fn();//result:outer
   </script>
  • 局部作用域:只在固定的代码片段内可访问到,而对于函数外部是无法访问的
<script>
      function fn(){
         var innerVar = "inner";
      }
      fn();
      console.log(innerVar);// ReferenceError: innerVar is not defined
</script>
  • 在函数内部声明变量的时候一定要使用,一定要使用var命令,否则实际是声明了一个全局变量
 <script>
      function fn(){
         innerVar = "inner";
      }
      fn();
      console.log(innerVar);// result:inner
   </script>
  • 只要函数内定义了一个局部变量,函数在解析的时候都会将这个变量“提前声明”所以下面代码中第一个scope的结果为global
<script>
      var scope = "global";
      function fn(){
         console.log(scope);//result:undefined
         var scope = "local";
         console.log(scope);//result:local;
      }
      fn();
   </script>

闭包

闭包的作用:
1、读取自身函数外部的变量
2、让这些外部变量始终保存在内存中

需要注意的是js函数内的变量值不是在编译的时候就确定的,而是等在运行时期再去寻找的。正如下面的代码中返回的不是0 1而是2 2

   <script>
      function outer(){
         var result = new Array();
         for(var i = 0; i < 2; i++){//注:i是outer()的局部变量
            result[i] = function(){
               return i;
            }
         }
         return result;//返回一个函数对象数组
         //这个时候会初始化result.length个关于内部函数的作用域链
      }
      var fn = outer();
      console.log(fn[0]());//result:2
      console.log(fn[1]());//result:2
   </script>

想要result数组函数返回我们期望的值就需要吧i 当参数传进去,但是这样虽然可以得到期望的结构,但是却不算闭包了,需要arg(num)在函数内部在定义一个内部函数,这样result返回的就是innerarg()函数

   <script>
      function outer(){
         var result = new Array();
         for(var i = 0; i < 2; i++){
            //定义一个带参函数
            function arg(num){
               function innerarg(){
                  return num;
               }
               return innerarg;
            }
            //把i当成参数传进去
            result[i] = arg(i);
         }
         return result;
      }
      var fn = outer();
      console.log(fn[0]());
      console.log(fn[1]());
   </script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值