美文网首页
【js致死点】函数

【js致死点】函数

作者: 南方帅 | 来源:发表于2019-02-26 18:08 被阅读0次

函数定义有两种方式 函数声明和函数表达式(new function 不考虑) , 两者的区别就是:

用函数声明创建的函数可以在函数解析后调用(解析时进行等逻辑处理);而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用。

Javascript 中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。这个微小的区别,可能会导致JS代码出现意想不到的bug,让你陷入莫名的陷阱中。

f();
var f = function (){};
// TypeError: undefined is not a function
// 等同于
var f;
f();
f = function () {};
  • length 返回函数预期传入的参数个数
  • 作用域

函数本身也是一个值,也有自己的作用域。它的作用域与变量一样,就是声明所在的作用域,与其运行的作用域无关

var x = function () {
  console.log(a);
};

function y(f) {
  var a = 2;
  f();
}

y(x)
// ReferenceError: a is not defined
  • 函数传值

参数如果为值的话,不会污染之前的变量。如果是传址的引用类型的话。就会影响的原始值

var obj = { p: 1 };

function f(o) {
  o.p = 2;
}
f(obj);

obj.p // 2

BUT如果函数内部修改的,不是参数对象的某个属性,而是替换掉整个参数,这时不会影响到原始值。 直接赋予新值,和原数据没有关系。不会影响原数据

var obj = [1, 2, 3];

function f(o) {
  o = [2, 3, 4];
}
f(obj);

obj // [1, 2, 3]
  • 闭包

闭包是javascript 中的一个难点,简单的理解就是定义在一个函数内部的函数。闭包最大的特点,就是它可以记住诞生的环境。这样就可以将函数内部和函数外部连接起来。
闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中,即闭包可以使得它诞生环境一直存在

function createIncrementor(start) {
  return function () {
    return start++;
  };
}

var inc = createIncrementor(5);

inc() // 5
inc() // 6
inc() // 7

为什么会这样呢?原因就在于inc始终在内存中,而inc的存在依赖于createIncrementor,因此也始终在内存中,不会在调用结束后,被垃圾回收机制回收

  • 为了避免污染全局变量 IIFE
(function(){
  var tmp = newData;
  processData(tmp);
  storeData(tmp);
})()
// 或者在前面加上`* ~ - +` 这些符号

相关文章

  • 【js致死点】函数

    函数定义有两种方式 函数声明和函数表达式(new function 不考虑) , 两者的区别就是: 用函数声明创建...

  • 2.Dart面向对象

    函数 命名可选参数{} 位置可选参数[] 作用域定义:与js的作用域一致,层层向上找。 Dart函数闭包 js函数...

  • 【js致死点】对象

    对象的键名都是字符串,所以加不加引号都可以如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符)...

  • 【js致死点】数值

    function parseInt 将字符串数字转化成按照进制选项 转化成对应数值 了解更多 正常使用 BUG ...

  • 【js 致死点】数组

    数组是一种特殊的对象,键值就是0,1,2数字 非正常操作因为数组继承对象,in 的操作也会遍历出非数字键的对象 A...

  • 【js致死点】indexOf 对比 includes

    indexOf 用于在字符串和数组中找到目标的索引 在字符串中使用的话会转换类型为 "hello1".inde...

  • 【js 致死点】运算符

    加法运算符只有加法运算符 在执行的时候有重载。其他都是转换成数值,加法根据前后执行相加、或拼接 余数(%)运算符 ...

  • Javascript基础(二)

    一.函数JS函数有个很大的坑,就是调用时参数可以和定义时不一致,这真是。。。并且每个函数执行到return语句时会...

  • JavaScript 05 函数

    js函数的概念和作用,js函数的定义,js函数的调用,js事件驱动的概念,js函数的实参和形参,js的作用域,js...

  • js 深入

    * js语法* js的动态函数和匿名函数* js动态函数Functionnew Function();* 匿名函数...

网友评论

      本文标题:【js致死点】函数

      本文链接:https://www.haomeiwen.com/subject/yopoyqtx.html