zoukankan      html  css  js  c++  java
  • JavaScript测试

    学习自CSDN某大神,地址:http://bbs.csdn.net/topics/390300541

    解释均来自大神之手,在下只是“抄袭”以防忘记!!!

    一、第一段JavaScript代码

    1 if (!("a" in window)) {
    2     var a = 1;
    3 }
    4 alert (a);

    解释:

      首先会解析所有函数,其次是var声明的变量,但是不会赋值(明白?)。因为javascript没有块的概念。像for(var i in array)这里的i依然是全局变量。因此,这几行的代码执行顺序是:

      1.var a;//声明一个变量,但是不会赋值
        2.if语句,全局变量相当于window的属性,所以"a" in window为真,取反为假。故不会执行大括号里面的语句。
        3.alert(a);//undefined

    个人测试:

     if(true){ var a = 1; } alert(a); 

    以上这段代码输出结果为1;a 是个全局变量。把true改为false之后输出a为undefined,证明变量a已经声明,只是没有赋值,其他解释如上大神解释

    但是var a = 1声明在函数function中结果就不一样了,代码如下:(局部变量和全局变量)

    1 function te(){
    2     var a = 1;
    3 }
    4 alert(a);

    二、

    1 var a = 1,
    2     b = function a (x) {
    3         x && a (--x);
    4     };
    5 alert (a);

    解释:

      我们可以用多个逗号将变量分开定义,而是用一个var。函数表达式类似于局部变量,不会被全局作用域中访问到。
      执行顺序:
         1.声明两个变量var a,b;并给他们赋值a=1,b=function a(){...};这里的function a是局部变量,外部无法访问到。因此全局a还是1.
         2.alert(a);//1

    个人测试:

    用实例讲话不做解释:

    1 function a(){
    2 return "Hello World!!!";  
    3 }
    4 alert(a);

    上面这段代码的运行结果是:

    下面是另外一段代码:

    1 var b = function a(){
    2 return 1;
    3 }
    4 alert(a);

    结果:出错!!!

    结合理解一下var b = function a(){...}之中的function a相当于一个局部变量

    三、

    1 function a (x) {
    2     return x * 2;
    3 }
    4 var a;
    5 alert (a);

    解释:

      js永远是先解析声明式函数,再解析变量。
      执行顺序:
         1.解析函数a;
         2.声明变量var a;因为a此时没有被赋值,所以它还是指向原来的值。即function a;
         3.alert(a);//不言而喻。

    个人测试:

    1 var a = 1;
    2 function a(){
    3 }
    4 alert(a);

    看这一段输出结果为1;(js永远是先解析声明式函数,再解析变量。)

    还得查查资料看看JavaScript的运行机制,这东西不同于java这么好理解

     四、

    1 function b (x, y, a) {
    2     arguments[2] = 10;
    3     alert (a);
    4 }
    5 b(1, 2, 3);

    解释:

      在函数内部可以引用一个对象,它是arguments类似数组,但不是数组。它代表了函数实际接收参数的集合。

      可以通过下标对相应参数进行访问。如果修改此对象某些属性,如arguments[index],则被传进来的第index(如果有的话,下标从0开始)变量的值也会被修改。
      执行顺序:

      1.声明一个函数b;
          2.执行函数b(1,2,3);因为这里arguments[2]与变量a引用的是一个值,所以当arguments[2]改变时,a也随之改变。

    五、

    1 function a () {
    2     alert (this);
    3 }
    4 a.call (null);

    解释: 

      call方法接受多个参数,其作用是借用别人的方法当作自己的方法。这样能保证执行的时候this能够指向自己。call方法的第二个参数到最后一个参数是传给借用过来函数的。

      第一个参数是借用的对象,如果这个对象为空,那么将会作为全局window对象调用。即函数中的this指向window

  • 相关阅读:
    No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s).
    播放器 倒计时 闹钟 日期 分秒 时间算法
    iOS 8 以后获取地图坐标:
    数据存储(直接写入、NSUserDefaults、NSkeyedArchiver)
    图片处理 模糊效果
    手把手教你Windows下Go语言的环境搭建
    github 上传或删除 文件 命令
    域名解析-delphi 源码
    指针与引用
    指针
  • 原文地址:https://www.cnblogs.com/liangqinghai/p/6440064.html
Copyright © 2011-2022 走看看