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. 一文详解Redis键过期策略

    摘要:Redis采用的过期策略:惰性删除+定期删除. 本文分享自华为云社区<Redis键过期策略详解>,作者:JavaEdge. 1 设置带过期时间的 key # 时间复杂度:O(1),最 ...

  2. MySQL 查询处理

    当腰删除或者更新数据时,首先要雪薰出这些记录,然后再对其进行相应的 操作. 每一个操作都会产生一个虚拟表,该虚拟表作为处理的输入,这些虚拟表对用户的透明的,只有最后一步生成的虚拟表才会返回给用户.

  3. Java案例——简单登录

    public class UserLogin { public static void main(String[] args) { //1.定义两个字符串作为已知用户的姓名与密码 String Use ...

  4. Kubernetes 使用kubeadm创建集群

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 实践环境 CentOS-7-x86_64-DVD-1810 Docker 19.03.9 Kubernetes version: v1.20.5 ...

  5. kubernetes证书过期处理

    rancher中文文档:http://docs.rancher.cn/ k8s中文文档:https://kubernetes.io/zh/docs 一.修改kubeadm 源码 增加证书到100年 $ ...

  6. web服务器-nginx配置文件

    web服务器-nginx配置文件 一 nginx配置文件 #启动子进程程序的默认用户 #user nobody #一个主进程和多个工作进程.工作进程是单进程的,且不需要特殊授权即可运行:这里定义的是工 ...

  7. w3af漏扫的基本使用

    一.安装 apt安装 apt-get update apt-get install -y w3af 出现无法定位软件包 源码安装 sudo apt-get install git sudo apt-g ...

  8. 如何运行MATLAB和C++混合编程

    在GitHub下载了一个大佬的滤波器程序,包含MATLAB和C++,刚开始直接运行,发现提示如下: 然后,第一步:点击截图访问后面的链接,跳转到如下截图: 第二步:点击上面截图的左下角,R2015b版 ...

  9. 如何获取 topic 主题的列表?

    bin/kafka-topics.sh --list --zookeeper localhost:2181

  10. Spring容器 从XML 文件中读取bean的定义,并实例化bean?

    解释Spring框架中bean的生命周期. Spring根据bean的定义填充所有的属性. 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanN ...