function Foo() {    //①   声明一个Foo的函数
getName = function () { alert (1); };
return this;
}
Foo.getName = function () { alert (2);}; ② 为Foo创建一个叫getName的静态属性存储一个匿名函数
Foo.prototype.getName = function () { alert (3);}; ③为Foo的原型对象创建一个叫getName的匿名函数
var getName = function () { alert (4);}; ④通过表达式创建一个getName的函数
function getName() { alert (5);} ⑤声明一个叫getName的函数 ① Foo.getName(); //2 直接访问Foo函数上存储的静态属性 2
② getName(); //4
③ Foo().getName(); //1
④ getName(); //1
⑤ new Foo.getName(); //2
⑥ new Foo().getName();
⑦ new new Foo().getName();

科普一下静态属性和静态方法;

function Myobject(){
this.instanceProp="456"; // 实例属性instanceProp
this.instanceMethod=function(){}; //实例方法instanceMethod
}
Myobject.prototype.protoProp="789";
Myobject.prototype.protoMethod=function(){ }; Myobject.staticProp="123"; //这样子添加的属性static就叫做静态属性
Myobject.staticMethod =function(){ //这样添加的方法staticMethod就叫做静态方法 }; var myobject=new Myobject();

以上属性和方法都是依赖于对象,JS中都是对象,函数也是对象
为一个函数的原型对象赋值后就会存在,
以这个函数为构造函数创建的实例对象能够访问到原型的属性及方法

第一问知识点:

  • 调用公有方法,公有属性,我们必需先实例化对象,也就是用new操作符实化对象,就可构造函数实例化对象的方法和属性,并且公有方法是不能调用私有方法和静态方法的
  • 静态方法和静态属性就是我们无需实例化就可以调用
  • 而对象的私有方法和属性,外部是不可以访问的

第二问知识点:

  • JavaScript 解释器中存在一种变量声明被提升的机制,也就是说函数声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。
  • 而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用

Javascript中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。

第三问知识点:

  Foo().getName();先执行了Foo函数,然后调用Foo函数的返回值对象的getName属性函数。

  执行Foo函数的时候,由于里面是一句赋值语句;(没有var声明;先向Foo函数作用域里面寻找getName变量,没有找到;所以向函数的作用域上层寻找是否有getName变量;其实是第④行表达式声明的函数;此时再在函数里面赋值为function(){alert(1);},之后Foo函数返回是this,调用的时候指向他本身。所已此时的答案为1;

知识点 : this指向、函数表达式声明提前,作用域;

第四问知识点:  ps:直接调用 getName函数 相对于window.getName();这个变量已经被Foo函数执行时给修改了;所以与第三问相同;

第五问知识点 :

打点.访问的优先级高于new()无参数运算符  参考运算符优先级https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

第六问和第七问都是实例化对象,然后调用实例化对象的方法;所以得到3

原文链接:https://juejin.im/entry/58db95eaac502e0058f8472e?from=timeline

JavaScript一些重要知识点结合题目的表现!的更多相关文章

  1. javascript数组的知识点讲解

    javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...

  2. JavaScript语言基础知识点图示(转)

    一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.Ja ...

  3. JavaScript 语言基础知识点总结

    网上找到的一份JavaScript 语言基础知识点总结,还不错,挺全面的. (来自:http://t.cn/zjbXMmi @刘巍峰 分享 )  

  4. JavaScript语言基础知识点图示

    原文:JavaScript语言基础知识点图示 一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运 ...

  5. 《JavaScript 模式》知识点小抄本(下)

    介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...

  6. 《JavaScript 模式》知识点小抄本(上)

    介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...

  7. JavaScript易错知识点

    JavaScript易错知识点整理1.变量作用域上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. 上方的函数作用域中虽然声明并赋值了a,但位于console之下 ...

  8. javascript基础入门知识点整理

    学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...

  9. JavaScript易错知识点整理

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

随机推荐

  1. elasticsearch的安装与使用

    1:官网进行下载 https://www.elastic.co/cn/elasticsearch/ 2:这里我用的是7.15.2 3:进行下载解压至d 盘 4:接下来我们cmd 切换目录进行运行 5: ...

  2. 35 异常机制 异常处理机制 异常处理五个关键字 try、catch、finally、throw、thorws 代码

    异常处理机制 概念 抛出异常 捕获异常 异常处理五个关键字 try.catch.finally.throw.thorws 代码 // main { int a = 1; int b = 0; // 假 ...

  3. 13 数组 Java内存分析 三种初始化

    Java内存分析 三种初始化 静态初始化 //静态初始化 创建+赋值 int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)}; 动态初始 ...

  4. Java基础:ThreadLocal及其原理

    ThreadLocal的用处 ThreadLocal是一个多线程的辅助工具类,目的是方便开发者维护多线程中的共享变量.我们知道如果我们想要在一个线程中一直访问一个变量或者在线程上下文中保存一个变量,我 ...

  5. CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面

    前言   上一篇,安装了Qt5环境.  本篇在服务器CentOs8.2上安装geant4软件,geant4使用Qt5来显示.   GEANT4 介绍   Geant4 是一个用于模拟粒子穿过物质的工具 ...

  6. (acwing蓝桥杯c++AB组)1.1 递归

    (acwing蓝桥杯c++AB组)1.课程介绍+递归 文章目录 (acwing蓝桥杯c++AB组)1.课程介绍+递归 课程介绍 第一讲 递归与递推 递归 引入 递归的底层调用顺序 例题与练习 课程介绍 ...

  7. Net Framework 中托管代码与非托管代码的区别

    托管代码与非托管代码的区别 1 简单的说,就是代码被编译成MSIL后在.net的Framework下运行,同操作系统底层的交互都交给framework去做. 所谓非托管代码就是脱离了Framework ...

  8. java-快捷操作

    crtl+c crtl+v crtl+a crtl+x crtl+x剪切 crtl+z撤销 crtl+s保存 alt+f4关闭窗口 完全删除shift+delet widow+r运行程序 window ...

  9. 说一下linux启动过程boot流程

    linux启动过程 https://www.ibm.com/developerworks/cn/linux/l-linuxboot/index.html http://www.ruanyifeng.c ...

  10. 对路径“C:\inetpub\wwwroot\Test\Temper\”的访问被拒绝 【已解决】

    在IIS7上部署IIS站点时,出现如下错误: 对路径"C:\inetpub\wwwroot\Test\Temper\"的访问被拒绝: 原因是:程序对"C:\inetpub ...