function Vertex(city, x) {
this.name = city;
this.num = x;
}
var node0 = new Vertex("邯郸", 0);
var node1 = new Vertex("邢台", 1);
var node2 = new Vertex("石家庄", 2);
var node3 = new Vertex("衡水", 3);
var node4 = new Vertex("保定", 4);
var node5 = new Vertex("沧州", 5);
var node6 = new Vertex("廊坊", 6);
var node7 = new Vertex("张家口", 7);
var node8 = new Vertex("承德", 8);
var node9 = new Vertex("唐山", 9);
var node10 = new Vertex("秦皇岛", 10);
var vex = [node0, node1, node2, node3, node4, node5, node6, node7, node8, node9, node10]; function Graph(num) {
this.verticesnum = num;
this.edges = 0;
this.adj = [];
this.edgeTo = [];
for (var i = 0; i < this.verticesnum; i++) {
this.adj[i] = [];
}
this.addEdge = addEdge;
this.showGraph = showGraph;
}
function addEdge(v, w, x)//此处形参是结点索引
{
this.adj[v][w] = x;
this.adj[w][v] = x;
this.edges++;
}
function showGraph() {
for (var i = 0; i < this.verticesnum; i++) {
document.write(vex[i].name + "->");
for (var j = 0; j < this.verticesnum; j++) {
if (this.adj[i][j] != undefined) {
document.write(this.adj[i][j] + "公里" + vex[j].name);
}
}
document.write("<br>");
}
}
g = new Graph(11);
g.addEdge(0, 1, 58.67);
g.addEdge(1, 3, 153.87);
g.addEdge(1, 4, 248.41);
g.addEdge(1, 5, 308.3);
g.addEdge(1, 6, 390.18);
g.addEdge(1, 7, 543.12);
g.addEdge(1, 8, 621.59);
g.addEdge(1, 9, 529.74);
g.addEdge(1, 10, 673.94);
g.addEdge(2, 3, 143.83);
g.addEdge(2, 4, 142.35);
g.addEdge(2, 5, 230.0);
g.addEdge(2, 6, 390.18);
g.addEdge(2, 7, 543.12);
g.addEdge(2, 8, 621.59);
g.addEdge(2, 9, 529.74);
g.showGraph();

  上周末一个同学拿了一段js代码给我看,说实话起初看起来懵懵的,不过仔细研究一下很有趣,据他介绍这是一段c++入门的代码 ,我很好奇为啥能用js实现,不过想到很多js底层都是c++和c写的也就不足为奇了! 这段代码直接服务制到浏览器是可以正常执行的,废话不多说了,说一下我对这段代码的理解:

首先浏览器加载从上到下var声明了很多全局变量,js里面是这样的它全部在javascript内部而不是function内部这段参考一下js里面作用域的概念,此时的this赋值了几个全局变量和function放到内存中,而当调用graph这个函数他内部调用了this这时候的this指的是graph这个函数体,并且设置了几个属性,属于私有属性,并且赋值给了属性两个函数,而这个函数正是加载全局的时候内部加载的两个函数体add和show,当全局变量g去调取graph这个函数的时候他的属性也被加载并且可以找到方法的索引,执行完毕之后浏览器里面能直接查询到这点:

之后向下继续执行,直到所有方法执行完毕并在浏览器里面显示出参数.

另外还有一种不知道正确不正确的理解方式,就是以类的概念去理解函数,定义graph方法相当于定义了graph类里面加载各种属性和方法,当执行到这个类之后相同命名空间下去调用对应方法最后输出

希望看到此贴的各位大神多多指出其中错误,方便日后改进.

javascript练习题的更多相关文章

  1. JavaScript 练习题

    练习题 1. 使用for循环输出1到50的值,要求每次循环只能输出一个值,每输出十个换一行. 2 日历生成器: 要求 用户输入,这个月有多少天,本月1号是星期几,自动生成日历 3. 表格生成器 4.  ...

  2. HTML——JAVASCRIPT练习题——图片轮播

    方法一: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  3. JavaScript练习题 全局变量 局部变量 作用域

    前沿:大家好~我是阿飞~本次 任何简单的事情都可以复杂化,本次让我们来做下搞事情的练习题吧 例题1: var a = 1; function fn1(){ var a = 2; alert(a); / ...

  4. 3月25 JavaScript 练习题

    一个关于找7的题 <script type="text/javascript" language="javascript"> for(var i=1 ...

  5. 廖雪峰JavaScript练习题3

    请尝试写一个验证Email地址的正则表达式.版本一应该可以验证出类似的Email: 正则表达式: <!DOCTYPE html> <html> <head> < ...

  6. 廖雪峰JavaScript练习题2

    请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart'] 肯定有更简单的方法, ...

  7. 廖雪峰JavaScript练习题

    练习:不要使用JavaScript内置的parseInt()函 数,利用map和reduce操作实现一个string2int()函数: <!DOCTYPE html> <html&g ...

  8. <JavaScript>几道javascript练习题

    问题1: 作用域(Scope) 考虑以下代码: (function() { var a = b = 5; })(); console.log(b); 控制台(console)会打印出什么? 答案 上述 ...

  9. javascript练习题(3):基础字符串运算

    用两种方法实现下列问题! 1. 把一个字符串转化为驼峰写法 需求:margin-left=>marginLeft 思路一:split 把它转化为一个数组然后修改内容 function conve ...

随机推荐

  1. python 协程池和pool.map用法

    一.问题描述 现在有一段代码,需要扫描一个网段内的ip地址,是否可以ping通. 执行起来效率太慢,需要使用协程. #!/usr/bin/env python # -*- coding: utf-8 ...

  2. 全栈项目|小书架|微信小程序-项目结构设计分包

    前面的文章 介绍了服务端的基础搭建以及用户模块的设计,接下来就是在服务端和客户端实现具体的业务了. 本篇文章先来介绍微信小程序开发的项目结构设计,也就是项目分包情况. 由于项目是在<极客时间-9 ...

  3. php ajax生成excel并下载

    目标:使用php,通过ajax请求的方式生成一个excel,然后下载. 思路:大致思路是发送一个ajax请求到后台,后台php处理后生成一个excel文件,然后把生成的文件放到一个临时目录,然后把文件 ...

  4. java web编程 servlet

    先从请求的信息里面获取协议,版本协议如果是1.1结尾的就报错,也就是我们常见的405报错: 405是协议请求方式错误,所以要重写doget或者dopost方法,直接调用父类的get和post方法是会报 ...

  5. django同一个项目中连接多个数据库

    一.场景与思路 同一个项目中需要连接多个数据库. 二.代码 代码中主要是三个部分,settings.models以及自己写的一个类. 1.自己写的文件:database_app_router.py  ...

  6. Android笔记(五十八)Android总结:四大组件——Activity篇

    什么是Activity Activity是一种包含用户界面的组件,主要用于和用户进行交互,一个APP通常由多个Activity组成. 每个Activity都对应一个布局文件,通过setContentV ...

  7. k8s pv无法删除问题

    一般删除步骤为:先删pod再删pvc最后删pv 但是遇到pv始终处于“Terminating”状态,而且delete不掉.如下图: 解决方法: 直接删除k8s中的记录: kubectl patch p ...

  8. OpenCV和ffmpeg编码资料分享

    本博也是在进行视频转码的学习道路上,也只是菜鸟一枚,收集了大量的资料,想在这和同路人分享一下 在博园里我发表一个JavaCV的随笔,里面介绍了JavaCV这个框架,它整合了OpenCV和ffmpeg等 ...

  9. k8s 应用优先级,驱逐,波动,动态资源调整

    k8s 应用优先级,驱逐,波动,动态资源调整 应用优先级 Requests 和 Limits 的配置除了表明资源情况和限制资源使用之外,还有一个隐藏的作用:它决定了 Pod 的 QoS 等级. 上一节 ...

  10. Python中的列表推导式

    Python里面有个很棒的语法糖(syntactic sugar),它就是 list comprehension ,有人把它翻译成“列表推导式”,也有人翻译成“列表解析式”.名字听上去很难理解,但是看 ...