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