JS函数难点理解

什么是函数?



函数是一种定义一次,即可多次调用的方法。如果函数挂载在一个对象上,如果通过这个对象来调用这个函数时,该对象就是此次调用的上下文(this的值)。函数可以在函数中定义,就会形成闭包。

    /**
     * 闭包实例
     * todo 用一个例子展现闭包的基本作用。
     */

    /*计数
     doctest:
     count(1);
     >>1
     count(1);
     >>2
     count(2);
     >>3
     count(5);
     >>8
     */
    var count = (function () {
        var i = 0
        var func = function (x) {
            if (arguments[0] != null) {
                i += x;
            } else {
                i++
            }
            return i;
        }
        return func
    })();  //加这个可以直接实例化。

    /**
     * 实例化两个对象。每个对象有变量i,且不共享.私有变量
     */

    var addPrivateValue = function (o, name) {
        var value = 1;
        o[‘get‘ + name] = function () {
            return value;
        }
        o[‘set‘ + name] = function (v) {
            value = v
        }
    }

    o = Object();
    addPrivateValue(o, "s");
    o.sets("asdf");
    o.gets();

    /**
     * 避免变量污染
     *
     * 应用场景
     * 如果一个页面,有一个按钮点击切换div的显示或者隐藏. (这个div的内容也在这个方法内定义。)
     *
     */

    var main_message = (function () {
        var message = "<div>" + " 测试!这是一个警告"
        "</div>";
        var box = document.createElement("div")
        document.body.appendChild(box)
        var show = function () {
            box.style.display = ‘‘;
            console.log("hha")
        }
        var hide = function () {
            box.style.display = "None";
        }
        var obj = {}
        obj.show = show;
        obj.hide =hide;
        return obj
    })();

什么是原型对象?

var Credit = function(){
        var name;
    }
    //prototype 返回对对象的原型引用。  原型函数会先调用原来的那个方法 与继承还是有区别的。
    Credit.prototype.getName = function(){
        console.log("Credit");
        return this.name
    }
    Credit.prototype.setName = function(name){
        console.log("Credit");
        this.name = name;
    }

    var NewCredit = function(){
    }
    NewCredit.prototype.getName = function(){
        console.log("NewCredit");
        return this.name
    }
    NewCredit.prototype.setName = function(name){
        console.log("NewCredit");
        this.name = name;
    }

    NewCredit.prototype = new Credit();

    var c = new NewCredit();
    c.setName("adf");//这个会输出Credit
    c.getName();
时间: 2024-08-08 09:40:16

JS函数难点理解的相关文章

JS函数传参理解

我的理解:js函数传递的参数如果是对象,那么他复制的值是地址.于是person的地址复制给了obj,obj.name='Nicholas'就修改了person.name.之后obj又指向了新地址,此时的obj.name和person毫无关系.所以最后的结果person.name='Nicholas';

Js函数function基础理解

正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定义方式(见下文)之外,还有一种定义的方式能更直观的体现出这个概念: var sum = new Function("num1", "num2", "return num1 + num2"); //不推荐 Function的构造函数可以接收任意数量的参

js回调函数(callback)理解

Mark! js学习 不喜欢js,但是喜欢jquery,不解释. 自学jquery的时候,看到一英文词(Callback),顿时背部隐隐冒冷汗.迅速google之,发现原来中文翻译成回调.也就是回调函数了.不懂啊,于是在google回调函数,发现网上的中文解释实在是太“深奥”了,我承认自己才疏学浅了.看了几个回调的例子后,貌似有点理解了.下面是我对回调函数的理解,要是理解错了,请指正,不甚感激. 首先还是从jquery网站上的英文定义入手,身为国人,我真感到悲剧.一个回调的定义被国内的“高手”解

通过原型链解析js函数一些难以理解的的作用域问题

基本原理 js函数在执行时,系统会创建一个隐式的属性scope,scope中存储的是函数的作用域链. 通过对这个scope的分析,就能解释JavaScript中许多难以理解的问题: 例1: function demo(){} demo(); scope属性是在函数执行时创建,如果这个函数是一个全局函数,他的scope里会保存一个Global object和一个activation object. global object保存的是全局的信息,而activition object保存的是函数内部的

js 函数 理解

JS函数不仅仅是一个函数, 因为其数据结构的独特性, 函数可以属性 函数 或者一个类-------------函数: --- 一个属性 --- 一个函数 --- 一个类 ================================= draw: function(obj, time) {} draw是一个对象的属性,可以用obj.draw(obj, time)的 方法调用函数 === js中的单例 这个对象代表单例,即单一的实例,不能创建重复实例. var car = { color:'re

37.浅谈js原型的理解

浅谈Js原型的理解 一.js中的原型毫无疑问一个难点,学习如果不深入很容易就晕了!    在参考了多方面的资料后,发现解释都太过专业,对于很多还没有接触过面向对象    语言的小白来说,有理解不了里面的专有名词!如果你没学过c++或者Java之类的更接触底层的语言,那就不要太深究,理解会用自然可以了,当接触到更多语言时慢慢的会理解越来越深刻! 下面我就举例分享一下prototype的概念!知道对于初学者知道这些就足够了! 分析一下,上面这个例子!我们可以知道 People的类型是一个对象!按照j

js函数中的this关键字

关于这个this关键字,也是很多项目中常常被用到的,那么,有人也许会问,干嘛要用this呢,在函数被调用时,直接指明是什么对象在调用不就行了?还整那么个模模糊糊的概念出来干嘛?不过嘛,存在即真理,既然有这么个东西,那也就有他存在的意义,下面来看看吧. 首先,我们要先回忆一下js函数都有哪几种调用的场合,有如下几种场合: 1.很常规的调用(即直接调用,其实你发现也是全局调用): 2.作为某个对象的豆哥方法被调用: 3.作为构造函数,用来新建某个新对象(object): 4.很让人头大的apply调

IIFE-js中(function(){…})()立即执行函数写法理解

介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的写法: Js代码   +function ($) { }(window.jQuery); 这种写法称为: IIFE (Imdiately Invoked Function Expression 立即执行的函数表达式). 一步步来分析这段代码. 先弄清函数表达式(function expression)和 函数

js面向对象深入理解

js面向对象深入理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 一.创建对象 创建一个对象,然后给这个对象新建属性和方法. var box = new Object(); //创建一个Object 对象 box.name = 'Lee'; //创建一个name 属性并赋值 b