← 返回目录

JavaScriptFul

第 29 / 119 卷日期:

</html>

按照标准的写法,我们还需要声明这个脚本的类型

<!DOCTYPE html> <html>

<head> <script type="text/javascript">

document.write('hello,world');

</script> </head>

<body></body> </html>

没有显示 hello,world ? 试试下面的代码

<!DOCTYPE html> <html>

<head> <script type="text/javascript">

document.write('hello,world');

</script> </head>

<body> <noscript>

disable Javascript </noscript>

</body> </html>

JavaScriptFul

我们需要让我们的代码看上去更像是 js,同时是以 js 结尾。就像 C 语言的源码是以 C 结尾的,我们也同样需要让我们的代码看上去更正式一点。于是我们需要在

helloworld.html 的同一文件夹下创建一个 app.js 文件,在里面写着

同时我们的 helloworld.html 还需要告诉我们的浏览器 js 代码在哪里

<!DOCTYPE html> <html>

<head> <script type="text/javascript" src="app.js"></script>

</head> <body>

<noscript> disable Javascript

</noscript> </body>

</html>

从数学出发让我们回到第一章讲述的小明的问题,从实际问题下手编程,更容易学会编程。小学时代的数学题最喜欢这样子了——某商店里的糖一个 5 块钱,小明买了 3 个

糖,小明一共花了多少钱。在编程方面,也许我们还算是小学生。最直接的方法就是直接计算 3x5=?

document.write(3*5);

document.write 实际也我们可以理解为输出,也就是往页面里写入 3*5 的结果,在有双引号的情况下会输出字符串。我们便会在浏览器上看到 15,这便是一个好的开始,

也是一个糟糕的开始。

设计和编程对于实际问题,如果我们只是止于所要得到的结果,很多年之后,我们就成为了 code monkey。对这个问题进行再一次设计,所谓的设计有些时候会把简单的问

题复杂化,有些时候会使以后的扩展更加简单。这一天因为这家商店的糖价格太高了,于是店长将价格降为了 4 块钱。

document.write(3*4);

于是我们又得到了我们的结果,但是下次我们看到这些代码的时候没有分清楚哪个是糖的数量,哪个是价格,于是我们重新设计了程序

num=3;

document.write(tang*num);

这才能叫得上是程序设计,或许你注意到了 “;” 这个符号的存在,我想说的是这是另外一个标准,我们不得不去遵守,也不得不去 fuck。

函数记得刚开始学三角函数的时候,我们会写

sin 30=0.5

而我们的函数也是类似于此,换句话说,因为很多搞计算机的先驱都学好了数学,都把数学世界的规律带到了计算机世界,所以我们的函数也是类似于此,让我们从一个

简单的开始。

function hello(){ return document.write("hello,world");

} hello();

当我第一次看到函数的时候,有些小激动终于出现了。我们写了一个叫 hello 的函数,它返回了往页面中写入hello,world的方法,然后我们调用了hello 这个函数,于是

页面上有了 hello,world。

function sin(degree){ return document.write(Math.sin(degree));

} sin(30);

在这里degree就称之为变量。于是输出了-0.9880316240928602,而不是0.5,因为这里用的是弧度制,而不是角度制。

sin(30)

的输出结果有点类似于 sin 30。写括号的目的在于,括号是为了方便解析,这个在不同的语言中可能是不一样的,比如在 Ruby 中我们可以直接用类似于数学中的表达:

=> -0.9880316240928618 2.0.0-p353 :005 >

我们可以在函数中传入多个变量,于是我们再回到小明的问题,就会这样去编写代码。

function calc(tang,num){ result=tang*num;

document.write(result);

} calc(3,4);

但是从某种程度上来说,我们的 calc 做了计算的事又做了输出的事,总的来说设计上有些不好。

重新设计我们将输出的工作移到函数的外面,

function calc(tang,num){ return tang*num;

} document.write(calc(3,4));

接着我们用一种更有意思的方法来写这个问题的解决方案

function calc(tang,num){ return tang*num;

} function printResult(tang,num){

document.write(calc(tang,num));

} printResult(3, 4)

看上去更专业了一点点,如果我们只需要计算的时候我们只需要调用 calc,如果我们需要输出的时候我们就调用 printResult 的方法。

的语法为什么看上去很奇怪,所以让我们看看他们到底是什么,修改app.js为以下内容

document.write(typeof document);

document.write(typeof Math);

typeof document 会返回 document 的数据类型,就会发现输出的结果是

object object

所以我们需要去弄清楚什么是 object。对象的定义是

无序属性的集合,其属性可以包含基本值、对象或者函数。

创建一个 object,然后观察这便是我们接下来要做的

store={};

store.tang=4;

store.num=3;

document.write(store.tang*store.num);

我们就有了和document.write一样的用法,这也是对象的美妙之处,只是这里的对象只是包含着基本值,因为

typeof story.tang="number"

一个包含对象的对象应该是这样子的。

store={};

store.tang=4;

store.num=3;

document.writeln(store.tang*store.num);

var wall=new Object();

wall.store=store;

document.write(typeof wall.store);

属性集合中的函数。

下面代码说的就是这个无序属性集合中的函数。

var IO=new Object();

function print(result){ document.write(result);

};

IO.print=print;

IO.print("a obejct with function");

IO.print(typeof IO.print);

我们定义了一个叫 IO 的对象,声明对象可以用

var store={};

又或者是

var store=new Object{};

两者是等价的,但是用后者的可读性会更好一点,我们定义了一个叫 print 的函数,他的作用也就是 document.write,IO 中的 print 函数是等价于 print() 函数,这也就是

对象和函数之间的一些区别,对象可以包含函数,对象是无序属性的集合,其属性可以包含基本值、对象或者函数。

复杂一点的对象应该是下面这样的一种情况。

var Person={name:"phodal",weight:50,height:166};

function dream(){ future;

};

Person.future=dream;

document.write(typeof Person);

document.write(Person.future);

而这些会在我们未来的实际编程过程中用得更多。

全站分卷索引 · 119 卷
  1. 1Growth: 全栈增长工程师指南
  2. 2软件开发的核心难题:沟通
  3. 3大公司的专家与小公司的全栈
  4. 4全栈工程师的未来:无栈
  5. 5基础知识篇
  6. 6工具只是辅助
  7. 7语言也是一种工具
  8. 8提高效率的工具
  9. 9IDE
  10. 10终端或命令提示符
  11. 11包管理
  12. 12环境搭建
  13. 13Windows
  14. 14GNU/Linux
  15. 15学好一门语言的艺术
  16. 16输出是最好的输入
  17. 17如何应用一门新的技术
  18. 18Web 编程基础
  19. 19从 HTML 到页面显示
  20. 20HTML
  21. 21中文?
  22. 22其他 HTML 标记
  23. 23小结
  24. 24CSS
  25. 25简介
  26. 26样式与目标
  27. 27更有趣的 CSS
  28. 28JavaScript
  29. 29JavaScriptFul
  30. 30面向对象
  31. 31其他
  32. 32前端与后台
  33. 33后台语言选择
  34. 34PHP
  35. 35Model
  36. 36View
  37. 37Controller
  38. 38后台即服务
  39. 39后台即服务
  40. 40数据库
  41. 41搜索引擎
  42. 42前端框架选择
  43. 43前台与后台交互
  44. 44JSON
  45. 45WebSocket
  46. 46编码过程
  47. 47Web 应用的构建系统
  48. 48Web 应用的构建过程
  49. 49Web 应用的构建实战
  50. 50Git 与版本控制
  51. 51Tasking
  52. 52Tasking 开发任务
  53. 53写代码只是在码字
  54. 54内置索引与外置引擎
  55. 55内置索引与外置引擎
  56. 56如何测试
  57. 57测试替身
  58. 58Mock
  59. 59测试先行
  60. 60可读的代码
  61. 61命名
  62. 62函数长度
  63. 63代码重构
  64. 64提炼函数
  65. 65内联函数
  66. 66查询取代临时变量
  67. 67重构到设计模式
  68. 68上线
  69. 69隔离硬件:虚拟机
  70. 70隔离操作系统:容器虚拟化
  71. 71隔离底层:Servlet 容器
  72. 72隔离依赖版本:虚拟环境
  73. 73隔离语言:DSL
  74. 74GNU/Linux
  75. 75HTTP 服务器
  76. 76数据库端缓存
  77. 77前端缓存
  78. 78运行机制
  79. 79自动化部署
  80. 80依赖与包仓库
  81. 81构建软件包
  82. 82数据分析
  83. 83想法-构建
  84. 84产品-衡量
  85. 85数据分析
  86. 86分析数据
  87. 87用户数据分析:Google Analytics
  88. 88流量获取
  89. 89移动应用
  90. 90网站性能
  91. 91SEO
  92. 92什么样的网站需要 SEO?
  93. 93内容
  94. 94UX 入门
  95. 95什么是简单?
  96. 96进阶
  97. 97认知设计
  98. 98持续交付
  99. 99持续集成系统
  100. 100持续交付
  101. 101持续部署
  102. 102持续阅读
  103. 103遗留系统与修改代码
  104. 104遗留代码
  105. 105修改遗留代码
  106. 106速度优化
  107. 107模块重构
  108. 108Retro
  109. 109三个维度
  110. 110架构模式
  111. 111预设计式架构
  112. 112演进式架构:拥抱变化
  113. 113意图导向
  114. 114重构
  115. 115模式与演进
  116. 116相关阅读资料
  117. 117架构解耦
  118. 118CQRS
  119. 119CQRS 结合微服务