JS基础2

作者: pp_5793 | 来源:发表于2018-10-21 20:36 被阅读0次

函数

主要参考:https://wangdoc.com/javascript/types/function.html
函数的第二次生声明会覆盖第一次。

斐波那契数列:1,1,2,3,5,8,13,21,34....
要求指定第几个就可以算出对应的值,代码实现:

function fib(num){
if(num===0){return 0;}
if(num===1){return 1;}
return fib(num-2)+fib(num-1);
}
console.log(fib(6));
//输出8

函数本身有自己的作用域,其作用域与变量一样,是在声明到的地方,而不是在调用的地方。

函数的中重点知识:闭包

var n=99;
function f1(){
    console.log(n);
}
f1()

以上代码说明了在函数f1内部可以调用外部的全局变量n,但是呢,在函数外部却不能调用函数内部声明的变量,代码如下所示:

function f1(){
    var n=99;
}
console.log(f1(n));
//error:n is undefined

我们有时候会使用函数内部的变量,但是直接调用时不会成功的,在这里我们会用到在函数内部再声明一个函数来解决这个问题。

function f1(){
    var n=99;
    function f2(){
        console.log(n);
    }
    return f2;
}
var result =f1();
result();

在JS中内部函数可以看见外部函数的变量,但是外部函数看不到内部的,也就是说父对象看不到子对象的变量,但是子对象可以看见父对象的变量,叫做JS中的“链式作用域”。子对象可以实现一步一步向上寻找父对象的变量

闭包有两个用处,一个是可以实现访问函数内部的变量,另一个是让子对象可以记住其父对象的环境,让这些变量一直存在于内存中。它也可以实现封装私有属性和私有方法。

unction create(start){
    return function(){
        return start++;
    };
}
var inc=create(5);
console.log(inc());
console.log(inc());
console.log(inc());
//返回5  6  7

对以上数据这样解释:在函数及外部声明一个外部变量并让create(5)赋值给它,当再次引用inc()时,会访问create()函数,第一次start=5,然后再访问的时候运行++运算,现在变成6,然后变成7,之所以用闭包,也就是可以让这个数据一直都在上一次的运算上进行下一次运算。


function Person(name){
    var _age;
    function setAge(n){
        _age=n;

    }
    function getAge(){
        return _age;
    }
    return {name:name,
            getAge:getAge,
            setAge:setAge};
}
var p1=Person('马强');
p1.setAge(23);
console.log(p1.getAge());
//输出23

以上代码为实现私有属性的封装。

但是闭包不能滥用。

I IFE(立即执行的函数表达式)

只对匿名函数使用,可以避免污染全局变量,它也可以封装一些外部无法执行的私有变量。

(function () {
  var tmp = newData;
  processData(tmp);
  storeData(tmp);
}());

相关文章

  • 小程序系列--JS基础

    JS基础 最后一遍JS基础,需要一定的语言基础 1. JS在网页中使用 2. 注释 3. 变量 声明变量 var...

  • js基础2

    1.事件 1)添加事件 点击事件:onclick 2)图片显隐 出现: 3)this的用法 在匿名函数中的this...

  • js基础2

    一、js引入方式和打印方式 四种引入方式(1) 百度一下 (2) (3)在html页面的任何位置加入 js代码...

  • JS基础2

    函数 主要参考:https://wangdoc.com/javascript/types/function.htm...

  • js基础(2)

    5、Math中的常用方法(10个)6、Date日期操作基础详解以及常用方法(12个) 5、Math中的常用方法(1...

  • JS基础--2

    js中的程序控制语句 常见的程序有三种执行结构: 顺序结构 分支结构 循环结构 顺序结构:程序从第一行开始执行,按...

  • js基础2

    1、 栈方法和队列方法 1)栈操作的方式:先进后出原则----通过重数组尾部添加数据项,然后在从数组的尾部获取尾部...

  • JS 基础 2

    Ba la la la ~ 读者朋友们,大家好,冷锋时间,话不多说,发车! 一、ECMAScript中关...

  • js基础(2)

    1、innerText用于改变标签内文本时,如果标签内含有其他元素则子元素将被覆盖 2、createAttribu...

  • js基础2

    js数据类型 js定义了6种数据类型,数值、字符串、布尔值称为原始数据类型的值即基本数据类型。将对象称为复杂类型的...

网友评论

      本文标题:JS基础2

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