zoukankan      html  css  js  c++  java
  • (十九)基础知识案例分析

    案例一:
    var name = 'World!'
    ;(function(){
    if(name === 'undefined'){
    	var name = 'Jane'//此处函数内变量提升;因此为undefined
    	console.log(name)
    }else{
    	console.log(name)
    }
    })()
    

    立即执行函数和变量提升声明

    案例二:
    var a = 6;
    setTimeout(function(){
    	console.log(0);
    	alert(a);
    	a = 666;
    },0)
    console.log(1)
    a = 66;
    

    由于setTimeout是异步因此先执行七外部代码即使其设置的时间为0;因此到alert的时候a=66;虽然在其后面将全局a的值改成666(都是在主线程执行)

    案例三:
    function fn1(){
    	var a = 2;
    	function fn2(){
    		a++;
    		console.log(a);
    	}
    	return fn2;
    }
    var f = fn1();
    f();		//3
    f();		//4
    

    闭包
    在这里插入图片描述

    案例四:

    由于var声明的是全局变量;alert出来的始终是循环之后的最后值;修改方法将var改为let或者使用闭包(如下图)

    案例五:
    var name = "A";
    var obj = {
    	name = "B",
    	getNamefunc:function(){
    		return function(){
    			return this.name;
    		}
    	}
    }
    console.log(obj.getNamefunc()());	//A
    

    主要是看返回的this.name中的this是谁。由于obj.getNamefunc()()调用的这个函数,因此是默认的调用即this指向的是windows,那么最后的console出来的那么就是指向全局的name为A

    var name = "A";
    var obj = {
    	name = "B",
    	getNamefunc:function(){
    		var that = this;	//缓存this
    		return function(){
    			return that.name;	
    		}
    	}
    }
    console.log(obj.getNamefunc()());	//B
    
    案例六(原型与原型链):
    function A(){
    }
    A.prototype.n = 1;
    var b = new A();
    A.prototype = {
    	n = 2,
    	m = 3
    }
    var c = new A();
    console.log(b.n,b.m);		//1 undefined
    console.log(c.n,c.m);		//2 3
    


    在这里插入图片描述

    案例七(原型、实例对象与原型链):
    var F = function(){}
    Object.prototype.a = function (){console.log('a()')}
    Fuction.prototype.b = function (){console.log('b()')}
    var f = new F();
    F.a();		//a()
    F.b();		//b()
    f.a();		//a()
    f.b();		//error;因为f不是function只是实力对象,其原型链上没有b;而F是个函数,函数也是object因此上面两个都可以打印出来
    

    案例八:
    function fun(n,o){
    	console.log(o)
    	return{
    		fun:function(m){
    			return fun(m,n)
    		}
    	}
    }
    var a = fun(0);
    a.fun(1);
    a.fun(2);
    a.fun(3);
    var b = fun(0).fun(1).fun(2).fun(3);
    var c = fun(0).fun(1);
    c.fun(2);
    c.fun(3);
    

    结果图

  • 相关阅读:
    SQL Server 2008的审核功能
    在SSMS(2008)中对数据库对象进行搜索和筛选
    关于在ASP.NET应用程序中异步调用Web Service的解决方案
    SSIS 2008中的Data Profiler任务
    开始Windows Embedded之旅
    在Access中计算两个日期之间的工作日天数
    当PrintForm遇到"RPC服务不可用的错误”
    REST 的知识 【转载】
    在C#中实现类似Eval这类动态求值的函数【转载】
    行内数据
  • 原文地址:https://www.cnblogs.com/smileyqp/p/12675296.html
Copyright © 2011-2022 走看看