隐式类型转换

调用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. 洛谷 P2652 同花顺(离散化)

    洛谷 P2652 同花顺(题面) 手动模拟了一下,其实离散化排序可以起很大作用题目要求花色相同,数字连续,那么我们要做的就是找一种花色,并提取出其中一串数字留下那些舍弃的牌换成相应花色,并和之前留下的 ...

  2. 39-Ubuntu-用户管理-04-usermod设置主组和附加组

    主组:通常在新建用户时指定,在/etc/passwd的第4列GID显示主组名. 附加组:在/etc/group中最后一列显示该组的用户列表,用于指定用户的附加权限. 1.修改用户的主组 sudo us ...

  3. 基于角色访问控制的OA系统的设计与实现

    摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ...

  4. kali环境配置

    1.配置源及刷新软件列表 建议用官方默认源: # vi /etc/apt/sources.list deb http://http.kali.org/kali kali-rolling main no ...

  5. 关于springmvc与ajax的交互-开发记录

    每次都栽在这个地方,好衰! 在jsp页面的<form>标签设置了action="请求url" ,button那里用js进行监听,点击触发ajax方法,将前台数据传到后台 ...

  6. python-面向对象-01课堂笔记

    面向对象 ''''1.面向过程编程   核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么   基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式​   ...

  7. 利用reduce方法,对数组中的json对象去重

    数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...

  8. twentytwenty插件,图片对比轮播

    https://zurb.com/playground/twentytwenty 项目应用 http://decortrim.mml.digital/

  9. C++:查找字符串字串并替换

    string a;/////指定串,可根据要求替换 string b;////要查找的串,可根据要求替换 string c; cin>>a>>b>>c; int p ...

  10. Go const 关键字

    Go const 关键字 package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int ...