zoukankan      html  css  js  c++  java
  • Java基础学习心得03

    函数

    • 函数的name属性返回函数的名字;
    • 利用toString,可以变相实现多行字符串:
    var multiline = function (fn) {
      var arr = fn.toString().split(‘
    ’);
      return arr.slice(1, arr.length - 1).join(‘
    ’);
    };
    
    function f() {/*
      这是一个
      多行注释
    */}
    
    multiline(f);
    // “ 这是一个
    //   多行注释”
    
    • 注意,对于var命令来说,局部变量只能在函数内部声明,在其他区块中声明,一律都是全局变量;
    • 函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域:
    var a = 1;
    var x = function () {
      console.log(a);
    };
    
    function f() {
      var a = 2;
      x();
    }
    
    f() // 1
    
    //很容易犯错的一点是,如果函数A调用函数B,却没考虑到函数B不会引用函数A的内部变量。
    var B = function () {
      console.log(a);
    };
    
    function A(f) {
      var a = 2;
      f();
    }
    
    A(B)
    // ReferenceError: a is not defined
    
    • 运行时无论提供多少个参数(或者不提供参数),JavaScript 都不会报错。省略的参数的值就变为undefined;
    • 函数的length属性与实际传入的参数个数无关,只反映函数预期传入的参数个数;
    • return不能单独使用,必须在函数中使用;
    • eval最常见的场合是解析 JSON 数据的字符串,不过正确的做法应该是使用原生的JSON.parse方法;

    严格模式与eval配合

    1. 外部作用域的代码无法取得eval内定义的变量:
    (function f() {
      ‘use strict’;
      eval(‘var foo = 123’);
      console.log(foo);  // ReferenceError: foo is not defined
    })()
    
    1. 但是eval可以读写外部作用域的变量的值:
    (function f() {
      ‘use strict’;
      var foo = 1;
      eval(‘foo = 2’);
      console.log(foo);  // 2
    })()
    

    • 为了保证eval的别名不影响代码优化,JavaScript 的标准规定,凡是使用别名执行evaleval内部一律是全局作用域:
    //下面这些形式都是eval的别名调用,作用域都是全局作用域。
    eval.call(null, ‘…’)
    window.eval(‘…’)
    (1, eval)(‘…’)
    (eval, eval)(‘…’)
    
  • 相关阅读:
    linux基本命令
    Linux中常用的50个命令
    Selenium2之XPath定位
    Selenium2浏览器启动及配置
    python学习内容.05
    python学习内容.04
    python学习内容.03
    python学习内容.02
    python学习内容.01
    RESTful
  • 原文地址:https://www.cnblogs.com/endymion/p/9192997.html
Copyright © 2011-2022 走看看