隐式类型转换

调用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. 剑指offer——59二叉搜索树的第k大节点

    题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4.   题解: 考察的就是中序遍历 不过注意进行剪枝 cl ...

  2. divide方法

    java.math.BigDecimal.divide(BigDecimal divisor, RoundingMode roundingMode) 返回一个BigDecimal,其值为(this/除 ...

  3. 6.2_springboot2.x分布式整合Dubbo

    1.分布式应用 ​ 在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud. 分布式系统: 特 ...

  4. 巧用border属性

    border是常见的css2属性,大家的印象中是不是只是作为边框使用,如下所示: 事实上border,还可以当做图标去使用 我们先来看段代码 <style> .div1{ margin: ...

  5. 轻量级的惰性控件——ViewStub

    在开发过程中,有时候,需要这样一种控件,正常情况下不可见,不占用任何布局空间,只在某种特定情况下显示,这种情况下,我们使用一个普通的View,利用设置setVisibility(View.GONE)自 ...

  6. nodejs MYSQL数据库执行多表查询

    1.设计数据库 2.设计数据库表 genres表: books表: 3.安装MySQL模块 4. 代码编写 (1) 第一种方法: 在query中使用nextTables属性,将属性值设置为ture d ...

  7. git删除远程服务的文件夹

    首先查看当前分支:git branch -a 删除缓存的idea:git rm --cached -r .idea 提交gitiginore文件,将.idea从源代码仓库中删除(-m 表示注解):   ...

  8. MySQL 刷题知识点整理

    1. left join on 与 right join on, inner join on 的区别: left join on 把左表中的行全部展示,而将寻找右表中符合的行展示: right joi ...

  9. 关于canvas绘制图像模糊问题

    前段时间在做项目的裁剪并上传图像功能的时候,发现裁剪后展示的图像比较模糊,之后去百度上搜索了一下,看到有一个解决方案是设置canvas的宽高为css宽高的3倍,使用后感觉效果很好,当时就没管原理接着做 ...

  10. 2018阿里云云数据库RDS核心能力演进

    摘要: 2018年云数据库RDS发展上,不但针对MySQL.SQL Server.PostgreSQL提供了适合个人入门用户的基础版产品,以实惠的价格普惠广大中小用户.更加入最新的MariaDB TX ...