javascript项目上很难用到的基础知识

1.预解析

解析JavaScript代码的时候,首先是执行语法分析,然后才是预解析。语法分析----------分析JavaScript代码是否有语法的错误,这是一个最低级的错误,稍不留神就错了。

语法有误

预解析-----------预览代码,首先把所有的 变量、函数、参数 提前到当前作用域的顶部。注意:函数有最高的权限,其它按照先后顺序覆盖。

alert(a); // a 函数块。 var a = 1; alert(a) // a 赋值后 等于 1。 function a(){ return false; }

分析上段代码,语法分析,没有问题。预解析,var a = undefined  被   var a = function a(){return falase;}  覆盖。其次在按先后顺序执行代码。



2.递归

何为递归?所谓递归函数就是在函数体内调用本函数。不知道各位同胞在项目中有没有用到过递归,反正我是没有用到过。可能是本人学艺不精的原因,还请各位海涵。最简单的例子就是计算阶乘。0和1的阶乘都会被定义为1,更大的数的阶乘是通过计算1*1*...来求得的,每次增加1,直至达到要计算阶乘的那个数。

function test(num){ if(num <= 1){ return 1; }else{ return num * test(num-1)} }

分析上段代码,test(5)为例:

test(5) = 5 * test(4)   ==>  必须知道test(4)为何值,  test(4) = 4 * test(3)   ==>  必须知道test(3)为何值, test(3) = 3 * test(2)   ==>  必须知道test(2)为何值,  test(2) = 2 * test(1)   ==>  test(1)  = 1;  依次网上返回,最后:test(5) = 5*4*3*2*1。   这里一个关于阶层的方法,就出来了,简简单单就两行代码,档次是不是一下就提起来了,是不是装B好神器。



3.作用域及闭包

作用域:变量在一定的范围内起作用,这个范围就叫作用域,在实际项目中,明明定义了一个变量,却报错或为undefined。有木有?有木有?没有,那你就是大神,本人还是个小菜鸟。

(1)、全局作用域:它的作用域是全局的,定义在js代码的最外层。注意:子作用域是可以访问全局作用域的变量。

(2)、函数作用域:作用于函数内部,我们通常称为块级作用域。一般情况下,是取不到函数内的变量。通过某些特殊的方式还是可以取到的,这种方式叫闭包。

var a;   function a() {      var a = 10  };  alert(a)  //a=10 ;这就叫闭包,是不是很简单。一般不要用,浪费内存。

var a = 10;

function  abc(){

    var a = 20;   alert(a)

}   abc()      //当函数声明时,会产生一个执行上下文AO,AO={a:10,window:{}},当函数执行时,会产生自己的执行上下文AO,在最顶部,AO={ a:20 },从上往下找,是否能找到想要的变量。在执行完函数的时候,会销毁自己的AO,不再占用的资源。



4.包装类

刚听到包装类的时候,心中有无限的感慨:“这人是多么的6,多么厉害,包装类都知道”。呵呵!问这个问题的人,基本上都是用来装x的。包装类并不是很难理解,对象是不是有属性,方法。那么,字符串呢?数字呢?

str.charAt()   纳尼,字符串这不是可以定义方法吗,难道字符串隶属于对象。错!错!错!都是错。

 隐式的进行了以下转换:                                                                                                                                                                                 var str = new String('hello'); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象                                   var s2 = str.chaAt(0); // 2 然后这个对象就可以调用包装对象下的方法,并且返回结给s2. str = null;                                                                 // 3 之后这个临时创建的对象就被销毁了, str =null; 




5.构造函数

构造函数和其它函数没有两样,就是普通的函数,为了区分,构造函数首字母大写。

function Person(){                                                                                                                                                                                                       //隐式创建   var this={}                                                                                                                                                                                          this.name = "祝家庄",                                                                                                                                                                                          this.age = 24,                                                                                                                                                                                                      this.sex = "男",                                                                                                                                                                                                  this.content = "哈哈哈哈"    //隐式返回return Person,当new存在的时候,                                                                                                 }                                                                                                                                                                                                                           var person = new Person(); console.log(person)     





6.原型(prototype)

什么是原型?通俗易懂的解释,就是一个对象的祖先,它给我们最实际的用处就是我们可以用原型来创建对象的属性和方法!


原型用

我们在来看看打印出来的对象


打印出Person对象


person.wife

明明是没有wife这个属性,为什么就能打印出来呢?因为,原型,纳尼,原型这么神奇,不要奇怪,不要惊讶,就是这么神奇,就是这么厉害。系统给你创建了__proto__属性,指向的就是这个原型,当在自己对象上找不到的时候,就会到原型上去找。这里只不过是冰山一角,还有很多关于原型的实例,和概念。如:原型链,原型的增、删、改、查。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 来源:仗剑走天涯! 关于javascript的作用域的一些总结,主要参考以上文章,加上自己的整理的理解。 近日对j...
    Michael_林阅读 901评论 0 1
  • 继承 一、混入式继承 二、原型继承 利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的...
    magic_pill阅读 1,047评论 0 3
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,093评论 0 13
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,429评论 0 5
  • 日期20171127 星期一 天气晴朗 通过21天特种兵营销特训中,暂暂的我摸索了一个很适合自己的发圈...
    卢健仪阅读 401评论 0 0