2019独角兽企业重金招聘Python工程师标准>>>

1. 语言类型中,编译型和解释型的区别是什么?   

第一个问题谈语言类型,显得十分鸡肋,不过小Shi还是决定将此作为该系列的第一个问题,理由不多述,千金难买我乐意~

编译型语言:

其在执行时,会有一个编译器对源代码进行编译,生成可执行文件.但是对于复杂的项目,通常是代码分散在各个源文件中,作为不同的模块来组织.此时编译各个文件时,会生成目标文件,其中内容基本上已经是可执行代码了,但由于只是项目的一个部分,所以不能直接运行.当编译全部完成时,由一个链接程序将其进行打包,形成一个我们需要的可执行文件.(这个过程还包括对各种资源,比如影音,图像文件的链接).

解释型语言:

和编译很相似,区别就在于,解释型语言是一步一步的,就是说在程序运行的前一刻,还只有源代码没有可执行程序.以一种不断解释,执行,解释,执行的方式进行循环.

因为运行方式的不同,所以解释型语言必然会比编译型的慢很多.

2. 面向对象和基于对象的区别?

面向对象有三大特点:封装,继承,多态.一般基于对象的使用,不支持通过现有的对象模板生成新的对象类型,继而产生新的对象.也就是说基于对象不要求有继承的特点,而多态表示的是父类型的子类对象实例,没有继承也就无从谈起多态.所以一般而言,面相对象和基于对象都有封装的特性,但是后者没有继承和多态的特性.

3. Javascript中null和undefined区别?

null在javascript中表示”空值”,常被看做对象类型的一个特殊值,即代表对象为空,或者说变量没有引用任何对象.

undefined表示的是”无值”,一个未定义的变量,或者已经声明但是还未赋值的变量,又或者一个不存在的对象属性,它们的值都是undefined.

注意的是,虽然undefined和null不同,但是运算符==却将它们视为相等的

4.Javascript中”(function($){…})(jQuery)”语句表示什么意思?

这相当于一个匿名函数的执行,大部分情况下在上下文环境中肯定没有jquery这个参数,所以在匿名函数内他会自己创建jquery对象.function($)给方法中传递$符号,就可以在方法体中使用jQuery的简写符号$,这是在jQuery销毁了全局的简写$后,在自定义方法中还可以使用这种简写方式的一个解决方案.

通常这种写法一般在插件的开发时用到,即(function(){})(jQuery)如此写实际上还是执行了()(para)匿名方法,只不过参数传递的是jQuery对象.

jQuery(function(){});通常用于存放DOM对象的代码,执行其中代码时,DOM对象已经存在.不可以存放插件开发的代码,因为jQuery对象没有得到传递,外部通过jQuery.method调用不了其中的方法.

(function(){})(jQuery);可以用来开发插件,但是执行其中代码时DOM节点不一定存在,所以操作DOM时要小心.

5.jQuery,extend函数的作用?

extend(dest,src1,src2,src3…);jQuery的扩展方法原型,它的含义是将src1,src2,src3….合并到dest中,返回值为合并后的dest,所以其修改了dest的结构.

如果不想改变其结构,可以这么写:

var result = $.extend({},{name:”tom”,age:21},{name:”li”,sex:”boy”});此时合并后的结果为result = {name:”li”,age:21;sex:”boy”}

可以看出如果参数名出线重复,后面的同名参数值会覆盖前面的.

如果省略dest参数,那么extend方法就只能有一个src参数,而且是将该src合并到调用extend方法的对象中去!

$.extend({hello:function(){alert(“hello”);}});将hello方法合并到jQuery全局对象中.
$.fn.extend({hello:function(){alert(“hello”);}});将hello方法合并到jQuery的实例对象中去.
$.extend({net:{}});  ->  在jQuery全局对象中扩展一个net命名空间.$.extend($.net,{ hello:function(){alert(“hello”);}});  ->  将hello方法扩展到之前扩展的jQuery的net命名空间中.jQuery的extend方法还有一个重载原型:extend(bool,dest,src1,src2…);

第一个bool参数代表是否进行深度拷贝.深度拷贝主要就是操作参数中的嵌套子对象.例子:

var result = $.extend(true,{},{name:”john”,location:{city:”bbb”,county:”usa”}},{last:”tom”,location:{state:”aaa”,county:”china”}});

可以看到合并的参数都有嵌套子对象location存在,第一个深度拷贝参数为true,那么合并后的结果:

{name:”john”,last:”tom”,location:{city:”bbb”,state:”aaa”,country:”china”}};

参数中的嵌套子对象也进行了合并,但是如果第一个参数bool为false,那么结果:

{name:”john”,last:”tom”,location:{state:”aaa”,country:”china”}};

6. jQuery的$命名冲突解决方案?

可以使用jQuery.noConflict()放弃对$的所有权,定义其他字符代替$取得jQuery权限,或者在语句块中使用$.如下代码:

jQuery.noConflict();jQuery(document).ready(function($){$(“#aaa”).hide();});

这种使用语句块的方法很常用,尤其是通常的插件中,无需知道引入的其他库,单纯通过写法屏蔽冲突.

7.什么是文档流?

将窗体自上而下分成一行行,并在每行按从左到右的顺序排放元素,这就是文档流.文档流是文档中可显示对象在排列时所占用的位置.

每个非浮动块级元素都独占一行,浮动元素按规定在行的一端,若当前行容不下,则另起新行再浮动.行级元素表不会独占一行,几乎所有的元素均可以生成子行用来摆放子元素.

有三种特殊情况会使元素脱离文档流:浮动,绝对定位,固定定位.(IE中特例,浮动元素也存在于文档流中).

浮动元素不占用正常文档流的空间,但是其定位还是基于正常的文档流,然后从文档流中抽出并尽可能远的移动到左侧或右侧.通过文档流来理解定位模式:

(1)相对定位:相对于元素在文档流中位置进行偏移,但保留原占位.

(2)绝对定位:完全脱离文档流,相对于position属性而非static值得最近父级元素进行偏移.

(3)固定定位:完全脱离文档流,相对于视区进行偏移.

8 .  Javascript中prototype含义是什么,有什么作用?

首先看一段代码,稍微区分一下Javascript中的方法种类:

function People(name)
{this.name = name ;this.Introduce = function(){alert(“my name is”+this.name);//上面这是对象方法
}People.Run = function(){alert(“I can run”);}  //这是类方法//原型方法
People.prototype.IntroducePro = function()
{alert(“my proname is”+this.name);
}var p1 = new People(“Tom”);
p1. Introduce();       //弹出my name is Tom
People.Run();         //弹出I can run
p1. IntroducePro();   //弹出my proname is Tom

Javascript中每个对象都有prototype属性,官方对其的解释是:返回对象类型原型的引用.

A. prototype = new B();

A的prototype是B的一个实例,A将B中的方法和属性全部克隆了一遍.A能使用B的方法和属性,是克隆而不是继承!可能出现:A的prototype是B的实例,B的prototype也是A的实例.

将prototype理解为一种克隆,那么如果A中有一个B的同名方法,此时函数运行时,会首先去函数本体中找,找不到则去prototype中寻找.可以理解为prototype不会克隆同名函数.

还是用代码说话:

<script type=”text/javascript”>function baseClass(){this.showmsg = function(){alert(“baseClass:showmsg”);}this.baseshowmsg = function(){alert(“baseClass:baseshowmsg”);}}//上面是一个函数,内部还有函数(闭包)baseClass.showmsg = function(){alert(“baseClass:showmsg static”);}   function extendClass(){this.showmsg = function(){alert(“extendClass:showmsg”);}}//上面是一个函数,内部还有函数(闭包)extendClass.showmsg = function(){alert(“extendClass:showmsg static”);}extendClass.prototype = new baseClass();//baseClass的一个实例中的属性和方法被克隆到extendClass对象中.var instance = new extendClass();//实例化一个extendClass对象.instance.showmsg();//extendClass对象调用showmsg方法,首先应该在本函数找,本函数有两个showmsg(),一个是对象的方法,一个是类的方法.这里应该调用的是对象的方法,所以弹出的是:” extendClass:showmsg”.instance.baseshowmsg();//extendClass对象调用克隆自baseClass的方法,弹出” baseClass:baseshowmsg”baseClass.showmsg.call(instance);//这句话好好解释一下,就是:将instance(extendClass实例化对象)当做baseClass来调用,调用其(baseClass)showmsg方法,这里调用的就是类的方法,所以弹出:” baseClass:showmsg static”.var baseinstance = new baseClass();baseinstance.showmsg.call(instance);//这里的解释和上面唯一不一样的就是调用的不是类的方法,而是对象的方法,所以弹出的是:” baseClass:showmsg”.
</script>

转载于:https://my.oschina.net/blogshi/blog/185970

JavaScript指南针系列收录(一)相关推荐

  1. 深入理解javascript函数系列第二篇——函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数.本文是深入理解javascript函数 ...

  2. javascript基础系列(入门前须知)

    -----------------------小历史---------------------------- javascript与java是两种语言,他们的创作公司不同,JavaScript当时是借 ...

  3. 深入理解javascript作用域系列第四篇——块作用域

    前面的话 尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用其他类型的作用域单元甚至可以实现维护起来更加优秀.简洁的 ...

  4. javascript动画系列第一篇——模拟拖拽

    前面的话 从本文开始,介绍javascript动画系列.javascript本身是具有原生拖放功能的,但是由于兼容性问题,以及功能实现的方式,用的不是很广泛.javascript动画广泛使用的还是模拟 ...

  5. JavaScript基础系列---闭包及其应用

    闭包(closure)是JavaScript中一个"神秘"的概念,许多人都对它难以理解,我也一直处于似懂非懂的状态,前几天深入了解了一下执行环境以及作用域链,可戳查看详情,而闭包与 ...

  6. JavaScript进阶系列01,函数的声明,函数参数,函数闭包

    本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...

  7. JavaScript设计模式系列四之外观模式(附案例源码)

    文章初衷 设计模式其实旨在解决语言本身存在的缺陷, 目前javaScript一些新的语法特性已经集成了一些设计模式的实现, 大家在写代码的时候,没必要为了用设计模式而去用设计模式, 那么我这边为什么还 ...

  8. JavaScript内核系列 第8章 面向对象的JavaScript(下)

    原创作者: abruzzi 接上篇:JavaScript内核系列 第8章 面向对象的JavaScript(上) 8.4实例:事件分发器 这一节,我们通过学习一个面向对象的实例来对JavaScript的 ...

  9. 【JavaScript基础系列】决定你的人生能走多远的,是基础。

    前言 javaScript门槛非常低,一点语法,一个dom,一个bom就可以使用它开发大部分js应用,再加上现在层出不穷的框架极大的简化抽象了javaScript的使用方式,但是我们始终不能忘记的一点 ...

最新文章

  1. 会php学node要多久,php开发需要会node吗
  2. dmx512协议c语言编程,DMX512协议+c程序代码.pdf
  3. 关于ReetrantLock
  4. OAuth2认证有一定的了解
  5. 遇到联邦计算数据碰撞难题怎么办?不妨试一试PSI
  6. Java基础篇之如何读取字符串
  7. 前端路由和后端路由(浅聊)
  8. Linux下多线程查看工具(pstree、ps、pstack),linux命令之-pstree使用说明, linux 查看线程状态。 不指定...
  9. SLAM--Pangolin显示相机位姿
  10. red hat linux 7.1 使用手册!,linux入门教材(Red Hat Linux 7.1)
  11. 全栈工程师将会缔造下一个高薪群体
  12. 浏览器打开标签页的几种方式
  13. Java创建Shape类
  14. 完美解决异常问题UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-7: ordinal not in ra
  15. ppt图片特效 c语言实现,用了这么久的PPT,才知道PPT可以一键生成特效图片!太好看了...
  16. 史上最简单MySQL教程详解(进阶篇)之视图
  17. 【秋钓皮皮】 奔跑吧,皮皮!(有图了)
  18. 升级iOS 15后iPhone无法连接App Store怎么办?
  19. 发布版,浏览器端隐藏代码
  20. 计算机无法进入桌面怎么备份,Windows系统损坏 | 无法进入系统如何正常备份数据?...

热门文章

  1. plc 滑台流程图_plc机械滑台控制
  2. Java随机生成n天的体温
  3. An Industry Evaluation of Embedding-based Entity Alignment
  4. 财税行业拓客的10个经典方法
  5. ToFNest: Efficient normal estimation for ToF Depth cameras
  6. 微信小程序开发:如何快速实现添加一条分割线的项目需求
  7. sm2263xt量产工具,sm2269xt开卡软件,SM2263XT、sm2269xt固态硬盘使用量产工具进行开卡教程,慧荣sm2263xt、sm2269xt怎么量产
  8. 通过qt修改图片dpi志
  9. 23种设计模式汇总整理2
  10. Android日志分析