隐式类型转换

调用Number()
当有运算符(加减乘除,求余)时,会调用Number()转为数字再运算,除了 加 当 有字符串时就变身成拼接
Boolean();
String(); typeof()string返回的类型

预编译

 在<script>里面的代码,进行预编译,将变量声明,,函数声明提高在逻辑的前面;执行代码时在GO(即window对象)中取出值,
var a = 1;
function text(){}
例如 Go{
  a : undefined;
  text : function(){}
}
当遇到函数的执行时(执行前一刻),也会进行预编译,和上面差不多,,1将声明变量,形参赋值为undefined,2 将形参值传入 3 声明方法
AO = (Active Object)
{
  a : undefined;
  text : function(){
}
ps:变量名和函数名相同时会覆盖 function text(a,b,c){
      console.log(arguments.length)//arguments实参变量数组,可以拿到实际传入的变量值
      console.log(text.length)//拿到形参个数
}

递归

就是找规律比如 ,,求阶乘  求n的阶乘,,
1 写出通式 f(n) = n * f(n-1); 2 找终止条件
function jiecheng(n) {
   if( n == 1){
      return 1;
    }   return n*jiecheng(n-1);
}

逻辑运算符

|| 寻找为真的表达式,,将值返回,不会再执行后面的表达式
&& 寻找假的表达式  将值返回,,不会再执行后面的表达式

作用域链

1、在函数声明后,,就会有  a[[scope]]生成,作用域链 例如数组 
2、函数执行时,生成Ao
function a(){   

  function b(){   
  }
}
定义时 A scope chain{0 : GO,}
执行时 A scope chain{0: ao ;1 : GO,}
执行完毕时,销毁引用,回到定义时状态
定义时 B scope chain{0 : A - ao ; 1 : GO}   它的出生在A中,,定义时,,就把A的执行Ao拿到自己B链中
执行时 B scope chain{0 : B - a0; 1 : A - a0;; 2 : GO}
执行完毕时,销毁引用,回到定义时状态
 

闭包

内部函数被外部函数返回出去,就会形成闭包;

        function a(){

       var count = 1;

            function b(){
                var count+;
                console.log(c)
            }
            return b;
        }
        var c = a();
        c();
 
当内部函数不执行被返回时,b函数就拿者a函数的执行期的AO,..
 
1 可以当做缓存使用 ,累加器。不会污染全局变量
就相当两个函数拿着同样的test函数引用,
function text()
        {
            var cache = 50;
            function add()
            {
                cache ++;
                console.log(cache)
            }
            function remove()
            {
                cache --;
                console.log(cache)
            }
            return  [add,remove]
        }
        var myCache = text();
        myCache[0]();
        myCache[1]();

缺点:嵌套太深的话,就会造成内存泄漏

立即执行函数( 即表达式  可以执行)

只要是表达式加上()就会被立即执行  并且忽略函数名,,函数失效

+ - ! 可以把函数声明变为立即执行,执行后就失去了销毁

//立即执行函数,,只执行一次,,执行完就会销毁
// 可以有返回值和
() 为执行符号,,能执行表达式
(function() {} () );推荐写法
(function () {})();
var a = (function (a,b){ console.log("")
return a*b;
}(,))
console.log(a)

圣杯模式

  //    圣杯模式,,继承

    Father.prototype.sex = "女";
function Father()
{ } function Son()
{ } var inherit = (function (){ var F = function(){};
return function(Target,Origin)
{
F.prototype = Origin.prototype;
Target.prototype = new F(); //prototype 是个对象,,直接赋值,指向的是同一个内存,,改变一个就会都会改变,new F(); 每次返回都是新的对象 防止父类被篡改
Target.prototype.constuctor = Target;
Target.prototype.super = Origin.prototype;
}
}());
inherit(Son,Father); var son = new Son();
var father = new Father();

js隐式类型转换,预编译、递归、作用域,作用域链、闭包、立即执行函数、继承圣杯模式的更多相关文章

  1. 深入js隐式类型转换

    前言 相信刚开始了解js的时候,都会遇到 2 =='2',但是 1+'2' == '1'+'2'为false的情况,这时候应该会是一脸懵逼的状态,不得不感慨js弱类型的灵活让人发指,隐式类型转换就是这 ...

  2. '2'>'10'==true? JS是如何进行隐式类型转换的?

    前言 '2'>'10'返回的true,可能很多人都不是很能理解吧? 在js中,当运算符在运算时,如果两边数据不统一,CPU就无法计算,这时我们编译器会自动将运算符两边的数据做一个数据类型转换,转 ...

  3. js条件判断时隐式类型转换

    Javascript 中,数字 0 为假,非0 均为真 在条件判断运算 == 中的转换规则是这样的: 如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 ...

  4. dynamic_cast 和 static_cast 隐式类型转换的区别

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  5. C++的隐式类型转换与转换操作符

    C++标准允许隐式类型转换,即对特定的类,在特定条件下,某些参数或变量将隐形转换成类对象(创建临时对象).如果这种转换代价很大(调用类的构造函数),隐式转换将影响性能.隐式转换的发生条件:函数调用中, ...

  6. C++的隐式类型转换

    C++是一种复杂的语言,其中有许多“好玩”的特性,学习C++的过程就像在海边捡一颗颗石头,只要坚持不懈,也许一颗颗小石头也能建起你自己小小的城堡. 废话完后,讲讲自己捡到的石头:隐式类型转换 学习出处 ...

  7. 【M21】利用重载技术避免隐式类型转换

    1.考虑UPint 的加法+,UPint a, b, result; 为了使result = a+10; result= 10+a; 都能通过编译,操作符重载如下: const UPint opera ...

  8. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 操作符重载和隐式类型转换

    C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...

  9. javascript的隐式类型转换

    首先简单了解js的typeof,会返回六种类型 即 number string boolen function object undefined 也就是六种基本数据类型 显示类型转换大概有以下几种: ...

随机推荐

  1. Feign 系列(01)最简使用姿态

    目录 Feign 系列(01)最简使用姿态 1. 引入 maven 依赖 2. 基本用法 3. Feign 声明式注解 Feign 系列(01)最简使用姿态 Spring Cloud 系列目录(htt ...

  2. sed命令详解 (转载)

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

  3. C# Windows服务相关

    代码及注释 ServiceController sc = new ServiceController("gupdatem"); sc.Stop();//停止服务 sc.Start( ...

  4. 【洛谷】P1229快速幂

    题目链接:https://www.luogu.org/problemnew/show/P1226 题意:求b^p % m之后的结果 题解:快速幂模板 代码: #include<iostream& ...

  5. js 万能判断

    console.log(Object.prototype.toString.call(123)) //[object Number] console.log(Object.prototype.toSt ...

  6. sanic+aiohttp爬虫demo(爬图片,新闻,数据)

    直接上代码,都是很简单的一些demo,爬取的网站,都没有什么加密措施,所以应该不涉及违法数据,哈哈 1.爬取网页数据(aiohttp+sanic+scrapy+xpath解析html) from sa ...

  7. C语言结构体指针

    #include <stdio.h> int main() { /*************************************************** *结构体指针:指向 ...

  8. Java 四种内部类

    静态内部类:类中静态类 成员内部类:类中非静态类 局部内部类:类中方法中有名字的类 匿名内部类:类中方法中无名的类 引言:在Java中通常情况下,一个类中会有属性和方法,但还可以包含内部类,内部类可以 ...

  9. ARM 汇编 内存访问指令

    一. 单个寄存器操作读写内存 内存访问指令格式:<opcode><cond> Rd, [Rn] Rn 中保存的是一个内存的地址值 1. 内存写指令  [ str,strb,st ...

  10. [HDU3333]Turing Tree

    莫队模板题... 不过树状数组也可以做...跟HH的项链几乎一模一样,离线询问,然后记录前缀,更新的时候把前缀删掉就好了,然而这题开long long,卡空间 //hgs AK IOI,IMO,ICH ...