博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaScript】【函数】蛛丝马迹
阅读量:7071 次
发布时间:2019-06-28

本文共 2298 字,大约阅读时间需要 7 分钟。

  1. 函数属性

    • name。Firefox、Safari、Chrome、Opera支持这个非标准属性。通过函数声明定义的函数,其namefunction后的标识符;通过函数表达式定义的函数,其name是空字符串。

      var a = function() {};  var b = new Function();  function c() {}  console.log(a.name); //''  console.log(b.name); //anonymous  console.log(c.name); //c
    • prototype。函数原型。

    • length。返回定义函数的参数个数。

      var a = function(){};  function b(i) {return i;}  console.log(a.length); //0  console.log(b.length); //1
    • arguments。函数内部的类数组对象,包含传入函数中的所有参数。可以通过数组下标的方式访问传入函数里的每一个参数。arguments.length返回实际传入函数的参数个数。

      function add() {      var _length = arguments.length;      var _init = 0;      for (var i=0; i<_length; i++) {          _init += arguments[i];      }       return _init;  }  add(1,2,3,4); //10
    • calleecaller

      function outer() {      function inner(){          console.log(arguments.callee.name); //inner          console.log(arguments.callee.caller.name); //outer      }      inner();  }  outer();
    • this函数内部属性。了解更多。

  2. 函数方法

    • apply()call()

      function sum(num1, num2) {      return num1 + num2;  }  function anotherSum(num1, num2) {      return sum.apply(this, arguments);  }  function yetAnotherSum(num1, num2) {      return sum.call(this, num1, num2);  }  console.log(sum(1,2)); //3  console.log(anotherSum(1,2)); //3  console.log(yetAnotherSum(1,2)); //3
    • bind()

      var window.color = 'red';  var o = {color:'blue'};  function sayColor() {      return this.color;  }  console.log(sayColor()); //red  var sayOColor = sayColor.bind(o);  console.log(sayOColor()); //blue
  3. 函数声明提升,使其在加载作用域数据之前(编译阶段)可用。

    //变量声明提升   console.log(a); //undefined   var a = 1;   console.log(a); //1   //这个过程相当于   var a;   console.log(a);   a = 1;   console.log(a);   //函数声明会覆盖同名变量声明   console.log(typeof x); //function   function x() {}   var x;
  4. 若传入函数的参数如果是基本类型值,函数操作的是这个参数的副本;若参数是对象,该参数只是这个对象的引用,函数操作的是对象本身。

    var a = 1;   var b = {value: 1};   function add(x) {       (typeof x === 'number') ? (x++) : (x.value++);   };   add(a);   add(b);   console.log(a);  //1   console.log(b.value); //2
  5. new这个过程有四个步骤

    // new Func();   var obj = {}; //1.创建空对象   obj.__proto__ = Func.prototype; //2.使obj的__prototype__指向构造函数的原型   var ret = Func.call(obj); //3.以obj作为构造函数的上下文调用Func。在为实例构造属性之前,属性值为undefined。   if (typeof ret == 'object') { //4.如果返回的是对象,就会覆盖构造的实例;否则会忽略返回的基本类型值。       return ret;   } else {       return obj;   }

转载请注明出处:

文章不定期更新完善,如果能对你有一点点启发,我将不胜荣幸。

你可能感兴趣的文章
[Everyday Mathematics]20150201
查看>>
第 75 章 Network Attached Storage(NAS 网络附加存储)
查看>>
docker -v挂载数据卷网络异常的问题
查看>>
《时间的朋友》跨年演讲金句
查看>>
移动前端UI选择
查看>>
SAP MIGO to Cancel Material Doc., Error Msg - Transaction code MBST not defined.
查看>>
食品安全中的那些事故
查看>>
[20150205]关于位图索引7.txt
查看>>
20150213关于共享池4-SQL内存结构父子游标
查看>>
井底之蛙
查看>>
careercup-扩展性和存储限制10.3
查看>>
合并多个工作薄workbooks到一个工作薄workbook
查看>>
公司的一个面试题:如何用css让一个容器水平垂直居中?
查看>>
Linux概念架构的理解(转)
查看>>
.Net 转战 Android 4.4 日常笔记目录
查看>>
Xamarin体验:使用C#开发iOS/Android应用
查看>>
GitLab版本管理(转)
查看>>
SpringMVC源码解析- HandlerAdapter - ModelFactory(转)
查看>>
[20171127]dual.txt
查看>>
JCombobox组合框效果实现(转)
查看>>